Как передать переменную через разные windows в PyQt5? - PullRequest
0 голосов
/ 21 января 2020

У меня есть два windows, первое окно - «Первое окно», а второе - «Календарь». Первое окно имеет одну кнопку pu sh (pbSelectDate) и одну метку (lbDate). В окне календаря есть календарь (CalendarBox) и одна кнопка pu sh (pbSelect).

когда я нажимаю кнопку выбора (pbSelectDate) в первом окне, появляется окно календаря. Я выбираю дату и нажимаю кнопку выбора (pbSelect) в окне календаря. Я хочу напечатать выбранную дату на этикетке (lbDate) в первом окне.

спасибо заранее. :)

это первый скрипт окна.

from PyQt5 import QtCore, QtGui, QtWidgets

from Calendar import Ui_CalendarWindow

class Ui_FirstWindow(object):

    def Open_Calendar(self):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_CalendarWindow()
        self.ui.setupUi(self.window)
        self.window.show()

    def setupUi(self, FirstWindow):
        FirstWindow.setObjectName("FirstWindow")
        FirstWindow.resize(654, 242)
        self.centralwidget = QtWidgets.QWidget(FirstWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lbDate = QtWidgets.QLabel(self.centralwidget)
        self.lbDate.setGeometry(QtCore.QRect(330, 70, 281, 131))
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.lbDate.setFont(font)
        self.lbDate.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.lbDate.setObjectName("lbDate")
        self.pbSelectDate = QtWidgets.QPushButton(self.centralwidget)
        self.pbSelectDate.setGeometry(QtCore.QRect(80, 100, 191, 61))
        self.pbSelectDate.setObjectName("pbSelectDate")

        self.pbSelectDate.clicked.connect(self.Open_Calendar)

        FirstWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(FirstWindow)
        self.statusbar.setObjectName("statusbar")
        FirstWindow.setStatusBar(self.statusbar)

        self.retranslateUi(FirstWindow)
        QtCore.QMetaObject.connectSlotsByName(FirstWindow)

    def retranslateUi(self, FirstWindow):
        _translate = QtCore.QCoreApplication.translate
        FirstWindow.setWindowTitle(_translate("FirstWindow", "MainWindow"))
        self.lbDate.setText(_translate("FirstWindow", "Sep"))
        self.pbSelectDate.setText(_translate("FirstWindow", "Select Date"))

if __name__ == "__main__":

    import sys
    app = QtWidgets.QApplication(sys.argv)
    FirstWindow = QtWidgets.QMainWindow()
    ui = Ui_FirstWindow()
    ui.setupUi(FirstWindow)
    FirstWindow.show()
    sys.exit(app.exec_())

это скрипт окна календаря ..

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_CalendarWindow(object):

    def PickedDate(self,var):
        self.selecteddate = self.CalendarBox.selectedDate()
        #print(self.selecteddate.toString('MMM')+'-'+self.selecteddate.toString('yyyy'))

    def setupUi(self, CalendarWindow):
        CalendarWindow.setObjectName("CalendarWindow")
        CalendarWindow.resize(512, 458)
        self.centralwidget = QtWidgets.QWidget(CalendarWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.CalendarBox = QtWidgets.QCalendarWidget(self.centralwidget)
        self.CalendarBox.setGeometry(QtCore.QRect(20, 20, 464, 289))
        self.CalendarBox.setObjectName("CalendarBox")
        self.pbSelect = QtWidgets.QPushButton(self.centralwidget)
        self.pbSelect.setGeometry(QtCore.QRect(160, 330, 181, 60))
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.pbSelect.setFont(font)
        self.pbSelect.setObjectName("pbSelect")

        self.pbSelect.clicked.connect(self.PickedDate)

        CalendarWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(CalendarWindow)
        self.statusbar.setObjectName("statusbar")
        CalendarWindow.setStatusBar(self.statusbar)

        self.retranslateUi(CalendarWindow)
        QtCore.QMetaObject.connectSlotsByName(CalendarWindow)

    def retranslateUi(self, CalendarWindow):
        _translate = QtCore.QCoreApplication.translate
        CalendarWindow.setWindowTitle(_translate("CalendarWindow", "MainWindow"))
        self.pbSelect.setText(_translate("CalendarWindow", "Select"))



if __name__ == "__main__":

    import sys
    app = QtWidgets.QApplication(sys.argv)
    CalendarWindow = QtWidgets.QMainWindow()
    ui = Ui_CalendarWindow()
    ui.setupUi(CalendarWindow)
    CalendarWindow.show()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 21 января 2020

Не изменяйте код, сгенерированный Qt Designer, но создайте другой класс, который наследуется от соответствующего виджета, и используйте начальный класс для его заполнения.

QLabel.setText (const QString) Установка текста очищает любой предыдущий контент.

from PyQt5 import QtCore, QtGui, QtWidgets

#from Calendar import Ui_CalendarWindow
class Ui_CalendarWindow(object):
    def setupUi(self, CalendarWindow):
        CalendarWindow.setObjectName("CalendarWindow")
        CalendarWindow.resize(512, 458)
        self.centralwidget = QtWidgets.QWidget(CalendarWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.CalendarBox = QtWidgets.QCalendarWidget(self.centralwidget)
        self.CalendarBox.setGeometry(QtCore.QRect(20, 20, 464, 289))
        self.CalendarBox.setObjectName("CalendarBox")
        self.pbSelect = QtWidgets.QPushButton(self.centralwidget)
        self.pbSelect.setGeometry(QtCore.QRect(160, 330, 181, 60))
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.pbSelect.setFont(font)
        self.pbSelect.setObjectName("pbSelect")
#        self.pbSelect.clicked.connect(self.PickedDate)
        CalendarWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(CalendarWindow)
        self.statusbar.setObjectName("statusbar")
        CalendarWindow.setStatusBar(self.statusbar)

        self.retranslateUi(CalendarWindow)
        QtCore.QMetaObject.connectSlotsByName(CalendarWindow)

    def retranslateUi(self, CalendarWindow):
        _translate = QtCore.QCoreApplication.translate
        CalendarWindow.setWindowTitle(_translate("CalendarWindow", "MainWindow"))
        self.pbSelect.setText(_translate("CalendarWindow", "Select"))


class Ui_FirstWindow(object):
    def setupUi(self, FirstWindow):
        FirstWindow.setObjectName("FirstWindow")
        FirstWindow.resize(654, 242)
        self.centralwidget = QtWidgets.QWidget(FirstWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lbDate = QtWidgets.QLabel(self.centralwidget)
        self.lbDate.setGeometry(QtCore.QRect(330, 70, 281, 131))
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.lbDate.setFont(font)
        self.lbDate.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.lbDate.setObjectName("lbDate")
        self.pbSelectDate = QtWidgets.QPushButton(self.centralwidget)
        self.pbSelectDate.setGeometry(QtCore.QRect(80, 100, 191, 61))
        self.pbSelectDate.setObjectName("pbSelectDate")
#        self.pbSelectDate.clicked.connect(self.Open_Calendar)
        FirstWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(FirstWindow)
        self.statusbar.setObjectName("statusbar")
        FirstWindow.setStatusBar(self.statusbar)

        self.retranslateUi(FirstWindow)
        QtCore.QMetaObject.connectSlotsByName(FirstWindow)

    def retranslateUi(self, FirstWindow):
        _translate = QtCore.QCoreApplication.translate
        FirstWindow.setWindowTitle(_translate("FirstWindow", "MainWindow"))
        self.lbDate.setText(_translate("FirstWindow", "Sep"))
        self.pbSelectDate.setText(_translate("FirstWindow", "Select Date"))


class CalendarWindow(QtWidgets.QMainWindow, Ui_CalendarWindow):              # +
    def __init__(self):
        super(CalendarWindow, self).__init__()
        self.setupUi(self) 


class FirstWindow(QtWidgets.QMainWindow, Ui_FirstWindow):                    # +
    def __init__(self):
        super(FirstWindow, self).__init__()
        self.setupUi(self)        

        self.pbSelectDate.clicked.connect(self.Open_Calendar)

    def Open_Calendar(self):
        self.window = CalendarWindow()      
        self.window.setupUi(self.window)
        self.window.show()

        self.window.pbSelect.clicked.connect(self.PickedDate)

    def PickedDate(self):    # , var
        self.selecteddate = self.window.CalendarBox.selectedDate()
#        print(self.selecteddate.toString('MMM')+'-'+self.selecteddate.toString('yyyy'))  
        self.lbDate.setText(self.selecteddate.toString('ddd-MMM-yyyy'))     # <---     

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = FirstWindow()
    w.show()
    sys.exit(app.exec_())

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...