Python GUI教程(八):在主窗口中调用对话框(转载)
本篇将会介绍:
- 使用qt设计师创建两个窗口
- 转换设计师UI代码为Python代码
- 从主窗口中调用对话框窗口
一、创建两个窗口
根据本篇的最终目标——在主窗口中调用对话窗口,我们先使用qt设计师创建两个窗口,其中一个主窗口MainWindows,一个含有两个按钮的对话窗口Dialog。
通过qt设计师新建一个MainWindows窗口,并在其中放置一个按钮:
![](http://upload-images.jianshu.io/upload_images/38544-3fa60dd34af48bb7.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
保存为UI文件,再新建一个对话窗口:
![](http://upload-images.jianshu.io/upload_images/38544-c22ddf8df0584532.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
同样保存为UI文件。
![](http://upload-images.jianshu.io/upload_images/38544-cd8246c55fc7c0ee.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这样我们本地文件夹有两个可供转换为Python代码的UI文件:
![](http://upload-images.jianshu.io/upload_images/38544-0b2049c78e7aa45e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
二、转换UI文件为Python代码文件
保存好两个窗口的UI文件之后,我们继续使用pyuic5工具,将这两个UI文件转换为Python代码文件。
打开命令行输入:
pyuic5 -x -o mainWindow.py mainWindow.ui
pyuic5 -x -o dialog.py dialog.ui
![](http://upload-images.jianshu.io/upload_images/38544-52f229f250597097.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
运行一下转换出来的Python文件,是否正常:
![](http://upload-images.jianshu.io/upload_images/38544-1ad78cb14b74c934.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
一切正常,接下来我们可以进行两个窗口的连接和调用了。
三、从主窗口中调用对话框窗口
在进行下一步之前,我们先在主窗口mainWindow中添加一个文本标签,设置文本为空,字体加大:
![](http://upload-images.jianshu.io/upload_images/38544-fa3cc63b4314a492.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
有个这个label我们可以将对对话框的操作,反馈在label标签中。
保存UI文件,使用pyuic5重新转换一次Python代码。
为了在主窗口代码中调用对话框窗口,我们需要在mainWindow.py文件中引入对话框窗口:
from GUI import dialog
(我写的为import dialog)
然后定义在主窗口的主类中定义一个方法,用来显示对话框窗口:
def click_button(self):
Dialog = QtWidgets.QDialog()
ui = dialog.Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
Dialog.exec_()
定义好了方法,我们需要对按钮进行点击调用的绑定,这在setupUi()方法中进行设置:
self.pushButton.clicked.connect(self.click_button)
这样就实现了按钮点击绑定对话框。
![](http://upload-images.jianshu.io/upload_images/38544-85b9c1c0986b3142.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我们知道,我们的对话框是有两个按钮的,一个“OK”,一个“Cancel”,在我们的GUI程序中,点击任意一个都会关闭对话框,效果似乎是一样的,但在PyQt5的内部机制的,这是两个不同的事件,下面我们就通过之前设置的label标签,展示其不同的机制。
我们修改一下click_button()方法,修改如下:
def click_button(self):
Dialog = QtWidgets.QDialog()
ui = dialog.Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
# Dialog.exec_()
rsp = Dialog.exec_()
if rsp == QtWidgets.QDialog.Accepted:
self.label.setText("点击了OK")
else:
self.label.setText("点击了Cannel")
在这里我们将对话框的运行赋值给了一个变量,然后将其与QtWidgets.QDialog.Accepted进行比较,QtWidgets.QDialog.Accepted表示的是对话框的接收事件,也就是“OK”代表的事件,如果为接收时间,设置label标签为“点击了OK”,否则设置label标签为“点击了Cannel”
![](http://upload-images.jianshu.io/upload_images/38544-38b164313cdf120b.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
文章版权所有:州的先生博客,转载必须保留出处及原文链接