赞
踩
事件,就是程序在运行中发生的事儿,桌面应用软件都是事件驱动的。事件可以是用户的操作,如鼠标点击或按键按下,也可以由系统产生,如定时关机。事件会触发相应的行为,即事件函数。
在事件模型中,有三个角色,分别是事件源、事件和事件目标。事件源就是发生了状态改变的对象,事件是这个对象状态的改变撞他改变的内容,事件目标是事件想作用的目标。事件源绑定事件处理函数,然后作用于事件目标身上。
事件源是状态发生变化的对象。它会生成事件。事件(对象)封装了事件源中状态的变动。事件接收者是要通知的对象。事件源对象将事件处理的工作交给事件接收者。
在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_())
运行程序之后,弹出的窗口如下:
好了,控件事件的内容就说到这了,关注我,下一节更精彩。
码字不易,你的关注和转发是对我最大的鼓励,谢谢!
一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。