软硬件环境
- Windows 10 64bit
- Anaconda3 with python 3.8
- PyQt5 5.15
简介
实际项目中,多窗口是个非常常见的操作,本篇就来看看 PyQt5
中多窗口的实现。
实例
我们做2个窗口,主窗口中有个按钮,点击按钮后跳出第二个窗口
界面通过 designer
来设计,分别是这样的
第二个窗口中放一个 label
,加上点文字
界面完成后,得到 ui
文件,通过 pyuic5.bat
将 ui
转换成 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
,可以看到
通常,在打开新窗口时,都会传递一些值过去,针对这种情况,我们也来看个实例
修改 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()
最后的执行结果是这样的
源码下载
https://github.com/xugaoxiang/learningPyQt5
PyQt5系列教程
更多 PyQt5
教程,请移步