欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

PyQt5系列教程(三十八)多窗口

PyQt5开发 迷途小书童 1年前 (2023-02-02) 963次浏览 0个评论

软硬件环境

  • Windows 10 64bit
  • Anaconda3 with python 3.8
  • PyQt5 5.15

简介

实际项目中,多窗口是个非常常见的操作,本篇就来看看 PyQt5 中多窗口的实现。

实例

我们做2个窗口,主窗口中有个按钮,点击按钮后跳出第二个窗口

界面通过 designer 来设计,分别是这样的

pyqt5

第二个窗口中放一个 label,加上点文字

pyqt5

界面完成后,得到 ui 文件,通过 pyuic5.batui 转换成 py 文件,命令是这样的

pyuic5.bat -o ui_mainwindow.py mainwindow.ui
pyuic5.bat -o ui_secondwindow.py .secondwindow.ui

接下来编写2个窗口对应的文件代码,主窗口是 main_window.py

import sys

from PyQt5.QtWidgets import QMainWindow, QApplication
from ui_mainwindow import Ui_MainWindow
from second_window import SecondWindow

class MainWindow(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        # 按钮点击处理
        self.pushButton.clicked.connect(self.showSecondWindow)

    def showSecondWindow(self):
        # 实例化第二个窗口,然后进行show,这里保留主窗口的显示。
        self.secWin = SecondWindow()
        # 窗口的关闭调用self.secWin.close()方法
        self.secWin.show()

if __name__ == '__main__':
    # 常规的app启动步骤
    app = QApplication(sys.argv)
    windows = MainWindow()
    windows.show()
    sys.exit(app.exec_())

第二个窗口 second_window.py 就很简单了,显示出来就行

from PyQt5.QtWidgets import QMainWindow
from ui_secondwindow import Ui_MainWindow

class SecondWindow(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(SecondWindow, self).__init__(parent)
        self.setupUi(self)

运行 main_window.py,可以看到

PyQt5系列教程(三十八)多窗口

通常,在打开新窗口时,都会传递一些值过去,针对这种情况,我们也来看个实例

修改 second_window.py 的构造函数,加入参数接收一个字符串,然后将字符串显示在 label 控件上

def __init__(self, param, parent=None):
    super(SecondWindow, self).__init__(parent)
    self.setupUi(self)

    print("从主窗口传递过来的字符是:{}".format(param))
    self.label.setText(param)

回到 main_window.py 中调用的地方,实例化时带上要传递的字符串参数,其它数据类型也是类似

def showSecondWindow(self):
    self.secWin = SecondWindow("Hello SecondWindow.")
    self.secWin.show()

最后的执行结果是这样的

PyQt5系列教程(三十八)多窗口

源码下载

https://github.com/xugaoxiang/learningPyQt5

PyQt5系列教程

更多 PyQt5 教程,请移步

https://xugaoxiang.com/category/python/pyqt5/

喜欢 (0)

您必须 登录 才能发表评论!