【Python】【Day2】图像管理系统笔记_图形交互界面_PyQt5【1】

  • PyQt 程序的结构:

  1. 导入需要的包和模块;
  2. 创建应用程序对象;
  3. 控件操作;
  4. 消息监听;

  •  程序解释

  • 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()

寻找子对象

通过各种规则限定查找指定对象

第三个参数:

  1. 递归查找:
    Qt.FindChildrenRecursively
  2. 只查找直接子对象:
    Qt.FindDirectChildrenOnly
obj1.findChild(类型或类型元组, "对象名", 默认是递归查找,可以只查找直接子对象)

寻找一堆子对象

obj1.findChildren(类型或类型元组, "对象名", 默认是递归查找,可以只查找直接子对象)

对象的内存管理

销毁父对象时子对象被同时销毁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Witheart__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值