PyQt5主窗口点击按钮弹出子窗口对话框

首先在Qt Designer中创建一个主窗口和一个对话框子窗口,如下图所示:
PyQt5主窗口点击按钮弹出子窗口对话框_第1张图片
设计完成后,转换成两个py文件,对于两个分开的文件实现子窗口的调用,我看了一些资料,基本都是新建一个文件然后实现显示主窗口以及调用子窗口,不是我想要的,所以在下面给出我的实现方法,就在主窗口一个文件中实现。
首先在主窗口文件中导入子窗口的文件,以及创建一个子窗口类初始化窗口,代码如下:

from ChildWindowTest import *

class ChildWin(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self):
        super(ChildWin, self).__init__()
        self.setupUi(self)

构造函数super()是必须的,否则就只能调用子窗口的显示,不能调用子窗口中的按钮等控件。
然后实现弹出子窗口功能,以及实现子窗口中的【确定】按钮功能,点击后关闭子窗口并在主窗口的文本框中显示消息。实现代码如下,在主窗口类中定义实现功能函数:

# 弹出子窗口与实现【确定】按钮功能
    def showDialog(self):
        # 创建子窗口实例
        dialog = ChildWin()
        # 显示子窗口
        dialog.show()
        # 实现子窗口中的【确定】按钮功能
        def pB_OK():
            self.textEdit.setPlainText("子窗口弹出成功!")
            dialog.close()
        # 关联【确定】按钮
        dialog.pushButton.clicked.connect(pB_OK)
        dialog.exec_()

其中【确定】按钮的函数我是直接在该里面定义的,亲测有效厚,而且个人觉得比重新再单独定义要方便惹!其中最后一行代码dialog.exec_()必不可少,不少子窗口只会弹出一下就自动关闭了!
最后于【打开子窗口】按钮进行关联,再在最后写个显示主窗口的代码就可以运行了,如下所示:

# 设置【打开子窗口】按钮
self.pushButton.clicked.connect(self.showDialog)
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

这个显示代码适合直接在ui转换成的py文件中使用,不需要在另外创建一个文件以及类了!运行后效果如下:
PyQt5主窗口点击按钮弹出子窗口对话框_第2张图片
PyQt5主窗口点击按钮弹出子窗口对话框_第3张图片

你可能感兴趣的:(PyQt5)