pyqt5学习笔记(1)

1.1 pyqt5 初体验

from PyQt5.Qt import *
import sys


# 使用sys.argv是为了让gui程序接收到用户传递的参数
app = QApplication(sys.argv)

# app.arguments()这个方法就是得到传递到这个gui程序的参数也就是sys.argv
# print(app.arguments())  # sys.argv的结果相同
# qApp是在包pyqt5中的init文件中的,因此一旦导入这个包, 那么qApp必定被创建了
# print(qApp.arguments())  # sys.argv的结果相同, 在其他模块中如果要获得传递通过命令行传递的参数,可以使用这种方式

# 创建一个控件,如果这个控件没有父控件,那么pyqt5会控件加上标题等属性,并可以设置属性内容
# 这个控件也可以叫做顶层控件,没有父控件的控件的展示需要调用show方法,父控件展示,子控件会自动展示,无需调用show方法
window = QWidget()

# 设置顶层控件的标题
window.setWindowTitle("社会我辉哥,人帅话还多")
# 设置空间的大小,如果这个控件是父控件,那么这个尺寸是不加上标题栏的长宽的
window.resize(500, 500)
# 展示位置
window.move(400, 200)
# 创建一个标签控件,指名父控件为window
label = QLabel(window)
# 设置标签文本
label.setText("第一个gui小窗口")
# 设置控件左上角相对于父控件的位置
label.move(200, 200)

# 展示父控件
window.show()

# 让外部程序知道这个gui程序退出的程序码,这个程序码能够反映这个程序时因为什么来退出的。
# app.exec_()会让这个应用进入无限循环,并且时刻检测用户发出的交互信号
sys.exit(app.exec_())

1.2 pyqt5的各个控件介绍

1.2.1 QObject:所有qt对象的基类
from PyQt5.QtCore import QObject


# QObject是pyqt5中所有控件的基类
qobject = QObject()

# 设置qt对象(控件等)名称,,一般这个名称是唯一的,用来当做qt对象的id使用,
qobject.setObjectName("zheng")

# 获取qt对象名称
print(qobject.objectName())  # zheng

# 使用setProperty方法动态的给一个qt对象添加属性和值
qobject.setProperty("name", "xiaoming")
qobject.setProperty("age", 18)

# property方法获取qt对象的属性值
print(qobject.property("name"))  # xiaoming

# 获取qt对象所有通过setProperty设置的属性名称
print(qobject.dynamicPropertyNames())  # [PyQt5.QtCore.QByteArray(b'name'), PyQt5.QtCore.QByteArray(b'age')]

上述api中setObjectName的应用场景:1.用于qss样式表的选择器(见下例1)2.用于装饰器的信号与槽。
例子1:


from PyQt5.Qt import *
import sys


class Window(QWidget):
    def __init__(self):
    	# 先调用父类的初始化方法
        super().__init__()
        self.setWindowTitle("标题")
        self.resize(500, 500)
        self.move(400, 400)
        self.sub_widget()

    def sub_widget(self):
        # 加载样式表的方式
        with open("style.qss", "r") as f:
            # 使用这个app来加载qss文件
            qApp.setStyleSheet(f.read())
        label1 = QLabel(self)
        # 设置标签的内容
        label1.setText("社会我涛哥")
        # 设置qt对象的名称
        label1.setObjectName("label1")
        # 给qt对象动态的添加属性
        label1.setProperty("name", "xiaoming1")
        label2 = QLabel(self)
        label2.setText("人帅话很多")
        label2.setObjectName("label1")
        label2.setProperty("name", "xiaoming")
        label2.move(100, 150)
        # 每个控件都是可以设置控件的
        # label1.setStyleSheet("color:red;")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()  # 显示结果"人帅话很多"显示红色
    sys.exit(app.exec_())
  • style.qss文件内容如下:
# 选择对象名称为label1的并且有name属性的值为xiaoming的QLabel的对象,注意这里的label1是经过setObjectName方法设置的
QLabel#label1[name="xiaoming"]{
	# 注意分号
    font-size: 20px;
    color: "red"
    }

QObject对象中父子关系api学习:


from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("火车票小助手")
        self.resize(500, 500)
        self.move(400, 400)
        self.sub_widget()

    def sub_widget(self):
        q1 = QObject()
        q2 = QObject()
        q3 = QObject()
        q4 = QObject()
        q5 = QObject()
        q6 = QObject()
        q2.setParent(q1)
        q3.setParent(q1)
        q4.setParent(q2)
        q5.setParent(q3)
        q6.setParent(q3)
        print("q1", q1)
        print("q2", q2)
        print("q3", q3)
        print("q4", q4)
        print("q5", q5)
        print("q6", q6)
        # 获取所有的直接父节点
        # print(q1.children())  # q2 ,q3

        # 获取所有的直接父节点
        # print(q4.parent())  # q2

        # 获取所有的子控件,包括非直接子控件都能够获取,这个函数有三个参数,参数一:
        # 可以传递要筛选的子控件的类型,或者是类型列表,参数二:可以传递子控件的名称,参数三:选择筛选的方式
        # print(q1.findChildren(QObject))
        # 获取一个子控件,如果找到一个直接进行返回
        print(q1.findChild(QObject))  # 返回q2

        # 空间的内存管理机制
        # 父控件一旦删除,所有的子控件自动删除
        q2.destroyed.connect(lambda x: print("子控件被删除了"))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值