pyqt(三)信号与槽 python lambda表达式
看lambda直接看:https://blog.csdn.net/PY0312/article/details/88956795
六、按钮控件
QPushButton
常见的按钮实现类包括:QPushButton、QRadioButton和QCheckBox
QPushButton是最普通的按钮控件,可以响应一些用户的事件
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton from PyQt5.QtCore import * from PyQt5.QtGui import QIcon import sys def func(): pass # 1.创建应用程序 app = QApplication(sys.argv) # 2.创建窗口 w = QWidget() # 修改窗口标题 w.setWindowTitle('普通按钮') """------------------ 显示普通按钮 ------------------""" btn = QPushButton() # 添加按钮提示 btn.setText('登录') # 提示气泡 btn.setToolTip('登录按钮') # 展示按钮 btn.setParent(w) # 3.显示窗口 w.show() # 4.等待窗口停止 sys.exit(app.exec())
七、信号和槽
1. 信号和槽简介
信号和槽机制是 QT 的核心机制,应用于对象之间的通信
- 信号和槽是用来在对象间传递数据的方法:当一个特定事件发生的时候,signal会被emit出来,slot调用是用来响应相应的signal的
- Qt中对象已经包含了许多预定义的 signal(基本组件都有各自特有的预定义的信号)
- 槽函数绑定了信号,信号一旦发出,就会自动调用绑定的槽函数
2. 信号和槽绑定
通过调用 QObject 对象的 connect 函数来将对象的信号与另外一个对象的槽函数相关联,当发射者发射信号时,接收者的槽函数将被调用
需求:
点击按钮,输出hello world
代码:
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton from PyQt5.QtCore import * from PyQt5.QtGui import QIcon import sys # 槽函数 def click(): print('hello') # 1.创建应用程序 app = QApplication(sys.argv) # 2.创建窗口 w = QWidget() # 修改窗口标题 w.setWindowTitle('信号和槽的绑定') """------------------ 添加按钮 ------------------""" btn = QPushButton() btn.setText('点我') btn.setParent(w) # 绑定按钮点击的信号和处理的槽函数 # clicked 信号 # click定义的槽函数 # btn.clicked.connect(click) """------------------ 槽函数使用lambda表达式 ------------------""" # 信号和槽函数参数必须要保持一致 # 如果信号中参数有= 槽函数可以不用添加 btn.clicked.connect(lambda :print('hello')) # 3.显示窗口 w.show() # 4.等待窗口停止 sys.exit(app.exec())
3. 使用PyQt的槽函数
需求: 点击按钮,关闭窗口
from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import QIcon import sys # 1.创建应用程序 app = QApplication(sys.argv) # 2.创建窗口 w = QWidget() # 修改窗口标题 w.setWindowTitle('使用系统的槽函数') """------------------ 创建按钮 ------------------""" btn = QPushButton() btn.setText('关闭窗口') # 显示按钮 btn.setParent(w) """------------------ 信号和槽绑定 ------------------""" btn.clicked.connect(QApplication.quit)# 使用QApplication的quit方法 # 3.显示窗口 w.show() # 4.等待窗口停止 sys.exit(app.exec())