第7天 | 28天学会PyQt5,控件事件

事件,就是程序在运行中发生的事儿,桌面应用软件都是事件驱动的。事件可以是用户的操作,如鼠标点击或按键按下,也可以由系统产生,如定时关机。事件会触发相应的行为,即事件函数。

在事件模型中,有三个角色,分别是事件源、事件和事件目标。事件源就是发生了状态改变的对象,事件是这个对象状态的改变撞他改变的内容,事件目标是事件想作用的目标。事件源绑定事件处理函数,然后作用于事件目标身上。

事件源是状态发生变化的对象。它会生成事件。事件(对象)封装了事件源中状态的变动。事件接收者是要通知的对象。事件源对象将事件处理的工作交给事件接收者。

控件事件

在PyQt5中实现事件功能,有3个步骤,分别是:定义事件处理函数、选择事件类型、用connect(slot)方法进行绑定。有交互功能的控件,如按钮QPushButton、复选框QCheckBox和下拉列表QComboBox等,都有connect(slot)方法。slot参数为事件处理函数名称。

按钮选择了单击clicked事件类型之后,用connect(slot)方法绑定事件处理函数。不同类型的控件绑定相同的处理函数时,可先用控件的setProperty(name, any)方法,定义相同属性名称和不同值,其中name字符串,any为任何数据类型。

sender()方法会返回一个QObject对象,它为窗口事件的父类,通过property(name)方法获取属性值。根据不同的属性值执行不同的操作。QColorDialog.getColor()会弹出颜色对话框,

QFontDialog.getFont()弹出字体对话框。

程序清单:control_connect.py

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget,
  QPushButton, QColorDialog, QFontDialog


# 继承QWidget
class ControlEvent(QWidget):
    ID_COLOR = 1000
    ID_FONT = 1001

    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        # 创建一个关闭按钮
        close_btn = QPushButton(self)
        close_btn.setText("关闭窗口")
        close_btn.move(20, 20)
        # 选择事件类型,绑定关闭方法
        close_btn.clicked.connect(self.close_win)
        # 点击按钮弹出颜色对话框
        color_btn = QPushButton(self)
        color_btn.setProperty("id", self.ID_COLOR)
        color_btn.setText("颜色对话框")
        color_btn.move(20, 60)
        # 点击按钮弹出字体对话框
        font_btn = QPushButton(self)
        font_btn.setProperty("id", self.ID_FONT)
        font_btn.setText("字体对话框")
        font_btn.move(20, 100)
        # 绑定同一个函数
        color_btn.clicked.connect(self.open_dialog)
        font_btn.clicked.connect(self.open_dialog)
        # 调整窗口大小
        self.resize(900, 500)
        # 窗口居中
        self.center()
        # 窗口标题
        self.setWindowTitle("控件事件")
        # 显示窗口
        self.show()

    # 打开对话框
    def open_dialog(self):
        sender = self.sender()
        if sender.property("id") == self.ID_COLOR:
            col = QColorDialog.getColor()
            if col.isValid():
                print("选择的颜色为:%s" % col.name())
        else:
            font, ok = QFontDialog.getFont()
            if ok:
                print("选择的字体为:%s" % font.family())

    # 关闭窗口
    def close_win(self):
        self.close()

    # 实现居中
    def center(self):
        f = self.frameGeometry()
        c = QDesktopWidget().availableGeometry().center()
        f.moveCenter(c)
        self.move(f.topLeft())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = ControlEvent()
    sys.exit(app.exec_())

运行程序之后,弹出的窗口如下:

第7天 | 28天学会PyQt5,控件事件

好了,控件事件的内容就说到这了,关注我,下一节更精彩。

码字不易,你的关注和转发是对我最大的鼓励,谢谢!

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值