2

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

 1 year ago
source link: https://xugaoxiang.com/2023/02/02/pyqt5-38-multiwindow/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

软硬件环境

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

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

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

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

1363e1761891b9fa.webp

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

844f9b77055d59f1.webp

界面完成后,得到 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,可以看到

b4b2fa79b3364e23.gif

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

修改 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()

最后的执行结果是这样的

56d6dabd03c97d79.gif

https://github.com/xugaoxiang/learningPyQt5

PyQt5系列教程

更多 PyQt5 教程,请移步

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK