一、使用可视化设计窗体的GUI程序
1、QT Creator的基本操作
2、将ui文件编写成py文件
在cmd窗口内输入指令
C:\Users\13788>cd C:\Users\13788\Desktop
C:\Users\13788\Desktop>pyuic5 -o ui_dialog.py dialog.ui
我将ui文件放在了桌面上,电脑要将pyuic5.exe添加到系统的PATH环境变量之中才能执行转换。
3、通过继承关系来实行界面与逻辑的分离
这里边有三种情况:
- 不用继承:
import ui_dialog
app = QApplication(sys.argv)
#QApplication代表一个应用程序,在窗口的实例前完成
deme = QWidget() #创建一个实例
ui = Ui_dialog() #创建一个ui类的实例
ui.setup_UI(demo) #用实例中的函数初始化demo
demo.show() #界面输出
sys.exit(app.exec_())
在ui文件中只是设置了各种组件的内容,本身并不能作为一个承载内容输出,所以在输出中不使用ui.show(),需要通过一个父容器即其中的demo才行。
在这种情况下,不能通过实例demo来修改界面中的标签,需要通过ui来更改。
- 多继承法
class QmyWidget(QWidget, Ui_dialog):
#继承QWidget和Ui_dialog
def __init__(self, parent =None):
super().__init__(parent)
#多继承时使用super()得到第一个基类,此时self就是一个QWidget的对象
self.lab ="多重继承的QmyWidget"
self.setupUI(self)
#调用setupUI使self自身被初始化
self.LabHello.setText(self.lab)
#ui中的界面组件就成为公共属性,可以通过self直接改变UI中的值
缺点:过于开放,不符合面对对象严格封装的设计思想;ui中的属性和类中新定义的属性混合在一起
- 单继承
class QmyWidget(QWidget):
def __init__(self, parent =None):
super().__init__(parent)
self.lab ="单继承的QmyWidget"
self.__ui =Ui_dialog()
#在类中定义一个ui的对象作为成员
self.__ui.setupUI(self)
self.__ui.LabHello.setText(self.lab)
#区别与多继承时直接用self调用,多了一个_ui作为分别的标志
#根据Python命名规则,两个下划线表示是私有的
窃以为就是写上更加的麻烦了。
4、信号与槽的使用
- 自动关联的槽函数
QtCore.QMetaObject.connectSlotsByName(Dialog)
qt creator 通过这句话即使在mydialog类的引用中不继承ui也能在不写代码的情况下使槽函数和信号结合。但是只有在UI设计界面自动生成的槽函数框架才有用。
- overload型信号
这中名称相同参数却不同的称为overload型信号
如果要自动关联必须用@pyqtSlot(类型)指定类型 - 手动关联
就是得自己写
5、便利的将ui文件转换成py文件
可以用一个bat文件,编辑中加入以下内容
echo off
pyuic5 -o ui_Dialog.py Dialog.ui
这之后点击一下就可以用了
学习资料来自《Python Qt CUI与数据可视化编程》