一、简介
PyQt5是一个Python语言的GUI框架,可以让程序员轻松创建使用者友好的界面。PyQt5Designer是PyQt5提供的一种可视化界面设计工具,可以让程序员通过拖拽与设置属性的方式来快速搭建QT应用的用户界面。
在使用PyQt5Designer时,程序员只需要用鼠标拖拽各种控件,设置控件的属性,即可完成一个基本的单窗口应用开发,而不必关心具体的代码实现方法,大大减轻了程序员的工作量。
from PyQt5 import QtWidgets, uic
app = QtWidgets.QApplication([])
win = uic.loadUi("main_window.ui")
win.show()
app.exec_()
二、可视化设计
使用PyQt5Designer时,可以直接在工具栏中选取各种控件,并将其拖拽到工作区中。在这个过程中,可以设置每个控件的属性,如大小、背景颜色、字体、对齐方式等。此外,还可以放置各种布局控件,用于管理子控件的位置和大小。
当控件和布局全部摆放完毕后,就可以将它们按需求进行分组,修改名称、调整层级关系等。在修改完毕后,就可以将界面保存为.ui文件,这个文件可以直接在代码中导入。
from PyQt5 import QtWidgets, uic
app = QtWidgets.QApplication([])
win = uic.loadUi("main_window.ui")
win.show()
app.exec_()
三、事件与槽函数
在PyQt5Designer中,事件与槽函数是界面开发中常用的交互方式。通过PyQt5Designer,可以轻松地将控件与其对应的操作进行关联,使控件能够响应用户的操作。
首先,在程序中定义槽函数。
from PyQt5 import QtWidgets
def func():
print("Hello World!")
app = QtWidgets.QApplication([])
win = QtWidgets.QWidget()
btn = QtWidgets.QPushButton("Push Me", win)
btn.clicked.connect(func)
win.show()
app.exec_()
然后,在PyQt5Designer中选中控件,选中"Edit Signals and Slots"。然后对控件所对应的槽函数与离线槽函数进行绑定,这样鼠标在单击控件时就会触发离线槽函数,进而触发槽函数。
from PyQt5 import QtWidgets, uic
def func():
print("Hello World!")
app = QtWidgets.QApplication([])
win = uic.loadUi("main_window.ui")
win.pushButton.clicked.connect(func)
win.show()
app.exec_()
四、自定义控件
在实际的开发中,有时需要开发自己的控件,这时就需要PyQt5Designer中提供的"Promote to..."功能。这个功能可以将一个普通控件转换为自定义控件,并为该控件指定自己实现的预览和工作模式。
要用到"Promote to..."功能,需要先将自定义控件的类定义在.py文件中,然后在PyQt5Designer中选中需要转换的控件,点击右键,选择"Promote to...",在窗口中填入自定义控件的类名即可。
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtCore import Qt
class MyWidget(QtWidgets.QLabel):
def __init__(self, parent):
super().__init__(parent)
self.setFixedSize(200, 200)
self.setAlignment(Qt.AlignCenter)
self.setPixmap(QtGui.QPixmap("image.jpg"))
app = QtWidgets.QApplication([])
win = uic.loadUi("main_window.ui")
l = MyWidget(win.centralWidget())
win.show()
app.exec_()
五、调试
在使用PyQt5Designer时,如果遇到一些问题,可以选择使用Qt Designer的内置调试器,这样就能清楚地查看Qt Designer与代码中的控件之间的连接。
在Qt Designer中,选中需要调试的控件,然后选择"Edit Signals and Slots"。在窗口中,可以看到该控件所对应的槽函数。如果没有显示,就需要检查程序代码是否正确地与该控件进行了连接。
from PyQt5 import QtWidgets, uic
def func():
print("Hello World!")
app = QtWidgets.QApplication([])
win = uic.loadUi("main_window.ui")
win.pushButton.clicked.connect(func)
win.show()
app.exec_()