PyQt5 доступ к данным из дочернего виджета, который будет напечатан в родительском окне - PullRequest
0 голосов
/ 18 октября 2019

Мне нужна помощь в доступе к значению из функции userChosenDate() в виджете OpenSelectDateTimeWindow. Мне нужно, чтобы это значение было напечатано на объекте QLabel printCurrentDate в моем главном окне после нажатия pushButtonConfirm в моем дочернем виджете OpenSelectDateTimeWindow. Мне удалось распечатать выбранную по умолчанию дату, выбранную из моего виджета календаря в дочернем виджете, но я не мог понять, как позволить тексту обновляться после выбора другой даты из моего дочернего виджета.

Интерфейсы для виджета и главного окна были сгенерированы из QtDesigner с незатронутыми кодами. Это следующие коды, которые я добавил для создания экземпляра пользовательского интерфейса.

Вот код для виджета:

class OpenSelectDateTimeWindow(QtWidgets.QWidget, Ui_SelectDateTime):
    # initialise GUI and window
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setupUi(self)
        # when Back button is clicked, window is closed
        self.pushButtonBack.clicked.connect(self.close)
        # when Confirm button is clicked, return day chosen by the user (print date, followed by day)
        self.pushButtonConfirm.clicked.connect(self.userChosenDate)
        self.pushButtonConfirm.clicked.connect(self.close)

    # 2 functions to return selected date and time on the
    # MainWindow UI / New Window UI where stall's information
    # will be printed according to the user chosen date and time

    # this function is to return user chosen date from the calendarWidget widget
    def userChosenDate(self):
        self.date = self.calendarWidget.selectedDate().toString("dd-MM-yyyy, dddd")
        print(self.date)  # for checking in terminal
        return self.date

Это код моего главного окна.

class OpenMainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self)
        self.setDateAndTimeButton.clicked.connect(self.DateTimeWindow)

    def DateTimeWindow(self):
        self.SelectDateTimeWindow = OpenSelectDateTimeWindow()
        # initialise GUI and window
        self.SelectDateTimeWindow.show()
        self.printCurrentDate.setText(self.SelectDateTimeWindow.userChosenDate())
        ################need help here###########################
        #while self.SelectDateTimeWindow.pushButtonConfirm.clicked():     
            #dateString = self.SelectDateTimeWindow.userChosenDate()
            #self.printCurrentDate.setText(dateString)

1 Ответ

0 голосов
/ 19 октября 2019

Я обнаружил, что добавление @pyqtSlot () над функцией, в которой я устанавливаю текст, разрешит то, что я хочу работать. Хотя я хотел бы, чтобы кто-нибудь объяснил, что на самом деле делает @pyqtSlot (), я не очень знаком с этим.

...