у меня есть главное окно с QlineEdit только для чтения, которое отображает сегодняшнюю дату и кнопку, которая открывает окно виджета календаря (из другого модуля в проекте), чтобы выбрать другую дату, проблема в том, что когда я выбираю другую дату, текст QlineEdit в графическом интерфейсе не меняется, хотя переменная, в которой хранится значение, успешно изменяется, я много искал без понятия
- перед использованием QlineEdit я пробовал Qlabel, но также не смог добиться результата
вот главное окно:
import sys
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit
from PyQt5 import QtCore, QtGui, QtWidgets
from cal_window import prev_day, today_str, UiCalWindow
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("My App")
self.setGeometry(50, 50, 800, 600)
self.label = QLineEdit(self)
self.label.setFont(QFont("Arial", 20))
self.label.setReadOnly(True)
self.label.setText(today_str)
self.setCentralWidget(self.label)
self.btn = QPushButton('open calender', self)
self.btn.move(50, 50)
self.btn.clicked.connect(self.choose_date)
def choose_date(self):
self.window = QtWidgets.QMainWindow()
self.ui = UiCalWindow()
self.ui.setupUi(self.window)
self.window.show()
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
а вот и подокно календаря:
from PyQt5 import QtCore, QtGui, QtWidgets, Qt
from datetime import date
today = date.today()
today_str = today.strftime("%Y-%m-%d")
prev_day = "2000-01-01"
class UiCalWindow(object):
def get_date(self, qDate):
global prev_day
self.day = '{0}-{1}-{2}'.format(qDate.year(), qDate.month(), qDate.day())
prev_day = self.day
print(prev_day)
def setupUi(self, cal_window):
cal_window.setObjectName("cal_window")
cal_window.setWindowModality(QtCore.Qt.ApplicationModal)
cal_window.resize(800, 600)
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
cal_window.setFont(font)
self.centralwidget = QtWidgets.QWidget(cal_window)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
self.calendarWidget.setFont(font)
self.calendarWidget.setLayoutDirection(QtCore.Qt.RightToLeft)
self.calendarWidget.setFirstDayOfWeek(QtCore.Qt.Monday)
self.calendarWidget.setGridVisible(True)
self.calendarWidget.setVerticalHeaderFormat(QtWidgets.QCalendarWidget.NoVerticalHeader)
self.calendarWidget.setObjectName("calendarWidget")
self.gridLayout.addWidget(self.calendarWidget, 0, 0, 1, 1)
self.calendarWidget.clicked.connect(self.get_date)
self.ok_dt_btn = QtWidgets.QPushButton(self.centralwidget)
self.ok_dt_btn.setMinimumSize(QtCore.QSize(0, 50))
self.ok_dt_btn.setObjectName("ok_dt_btn")
self.ok_dt_btn.clicked.connect(cal_window.close)
self.gridLayout.addWidget(self.ok_dt_btn, 1, 0, 1, 1)
cal_window.setCentralWidget(self.centralwidget)
self.retranslateUi(cal_window)
QtCore.QMetaObject.connectSlotsByName(cal_window)
def retranslateUi(self, cal_window):
_translate = QtCore.QCoreApplication.translate
cal_window.setWindowTitle(_translate("cal_window", "MainWindow"))
self.ok_dt_btn.setText(_translate("cal_window", "go"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
cal_window = QtWidgets.QMainWindow()
ui = UiCalWindow()
ui.setupUi(cal_window)
cal_window.show()
sys.exit(app.exec_())```
pyuic
(подробнее о с помощью конструктора, чтобы узнать, как правильно использовать эти файлы). Тогда зачем вы создаете новый экземпляр MainWindow вchoose_date
? Это не имеет смысла: если вы хотите изменить текст метки, просто используйтеself.label.setText()
. - person musicamante   schedule 11.08.2020