-
PyQt 程序的结构:
- 导入需要的包和模块;
- 创建应用程序对象;
- 控件操作;
- 消息监听;
-
程序解释
- sys.argv:类似于 C 语言中的 main 命令行传参,通过命令行启动的时候可以通过这个参数传参实现不同功能
- .arguments()可以获取传入的参数
app = QApplication(sys.argv) print(app.arguments())
- 在 QApplication() 中初始化了全局的 qApp 全局变量对象,可以使用这个对象而不使用其他对象来获取 .arguments()
print(qApp.arguments())
- 对控件进行操作后进入消息循环(保持交互窗口开启并监听用户操作)
app.exec_()
一般会将消息循环的返回码作为系统退出码传递:
sys.exit(app.exec_())
-
控件操作
创建控件
当控件没有父控件时,将为顶层控件(窗口),有最大化、最小化、关闭按钮,且可以设置标题图标。
创建一个窗体小部件
window = QWidget()
创建按钮
window = QPushButton()
创建标签
window = QLabel()
通过继承控件父类初始化包装子控件
class Window(QWidget):
def __init__(self):
super.__init__() # 执行父类初始化
# 以下是自定义控件的封装
self.setWindowTitle("")
self.resize(500, 500)
self.setup_ui() # 开始界面的ui
def setup_ui(self):
设置控件
设置控件文本内容
window.setText("lalalala")
展示控件
window.show()
技巧
子类查看
print(QWidget.__subclasses__())
QSS字符串样式设置
作用:对样式进行统一的设置
一般放在一个文件里,读取文件中的全部内容并内容放到样式表里。
label = QLabel()
label.setText("文本")
label.setStyleSheet("font-size: 20px;color: red")
通过给对象设置名称,使之成为为一个 id 选择器,对不同的选择器使用不同的 qss 样式。
在 .qss 文件中设置好一些样式,此处通过 id:"notice" 进行选择:
QLabel#notice{
font-size: 20px;
color: red;
}
读取 qss 样式设置:
with open("QObject.qss", 'r') as f:
qApp.setStyleSheet(f.read())
为对象设置对象名作为 id 选择器:
label = QLabel(self)
label.setObjectName("notice")
label.setText("文本")
id 选择还可以划分等级:
QLabel#notice[noticelevel="normal"]{
font-size: 20px;
color: green;
border-color: green;
}
对应为要设置的对象设置等级:
label = QLabel(self)
label.setObjectName("notice")
label.setProperty("noticelevel", "normal")
label.setText("文本")
对象操作
你有没有对象呢?
设置父对象
父对象只有一个,按最后设置的为准。
obj0 = QObject()
obj1 = QObject()
obj0.setParent(obj1)
获取父对象
obj0.parent()
获取子对象
obj1.children()
寻找子对象
通过各种规则限定查找指定对象
第三个参数:
- 递归查找:
Qt.FindChildrenRecursively
- 只查找直接子对象:
Qt.FindDirectChildrenOnly
obj1.findChild(类型或类型元组, "对象名", 默认是递归查找,可以只查找直接子对象)
寻找一堆子对象
obj1.findChildren(类型或类型元组, "对象名", 默认是递归查找,可以只查找直接子对象)
对象的内存管理
销毁父对象时子对象被同时销毁