如何在 Pyqt5 中处理新窗口Qwidet?

问题描述

一共有三个类,第一个类是主窗口类,第二个类被主窗口类调用,第三个类是日历类。

我想要当我点击第二个窗口中的按钮时,弹出第三个窗口日历

当我点击按钮时,日历弹出,但我无法处理。

我无法点击和处理日历中的任何内容,当第二个窗口结束时,它一起结束。

我觉得在第二节课中调用日历类有问题,但我找不到。

这里是代码

-- 主窗口 --

class MyApp(QMainWindow):   
    def __init__(self):
        super().__init__()
        self.initUI()       


    def initUI(self):

        menu = self.menuBar()                     

        menu_file = menu.addMenu('file')          
        menu_sal = menu.addMenu('to excel')      


        file_exit = QAction('quit',self)           
        file_exit.setShortcut('Ctrl+Q')
        file_exit.setStatusTip("click quit")
        file_exit.triggered.connect(QCoreApplication.instance().quit)   

        cal_sal1 = QAction('test1',self)
        cal_sal1.triggered.connect(self.open_new_window1)  

        cal_gamagam = QAction('test2',self)
        cal_gamagam.triggered.connect(self.open_new_window1)  



        menu_file.addAction(file_exit)              
        menu_sal.addAction(cal_sal1)
        menu_sal.addAction(cal_gamagam)


        self.resize(450,400)
        self.show()


    def open_new_window1(self):        
        dlg = SelectPay_Dialog1()
        dlg.exec_()

    def open_new_window2(self):         
        dlg = SelectPay_Dialog1()
        dlg.exec_()

--- 第二类(子窗口)---

class SelectPay_Dialog1(QDialog):  
    def __init__(self):
        super().__init__()  
        self.initUI()


    def initUI(self):
        
        self.setGeometry(500,200,400,100)



        self.pushButton1 = QPushButton("calrendar")
        self.pushButton1.clicked.connect(self.pushButtonClicked1)


        layout.addWidget(self.pushButton1,2,1)

        self.setLayout(layout)


      def pushButtonClicked1(self):
        dlg = Calendar_App()
        dlg.exec_()

--- 第三类---

class Calendar_App(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.clicked[QDate].connect(self.showDate)

        self.lb = QLabel(self)
        date = cal.selectedDate()
        self.lb.setText(date.toString("yyyy-MM-dd"))

        vBox = QVBoxLayout()
        vBox.addWidget(cal)
        vBox.addWidget(self.lb)


        self.setLayout(vBox)
        self.setwindowTitle('calendar')
        self.setGeometry(500,500,400)
        self.show()

    def showDate(self,date):
        self.lb.setText(date.toString("yyyy-MM-dd"))



--- main ---

if __name__ == '__main__':

    app = QApplication(sys.argv)   
    ex = MyApp()                   
    sys.exit(app.exec_())          

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)