今天是Pyside6的第六篇内容。一起来看看各按钮的信号与槽。
from PySide6.QtCore import Qt from PySide6.QtGui import QAction from PySide6.QtWidgets import QApplication, QWidget, QRadioButton, \ QPushButton, QCheckBox, QToolButton, QMenu class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initui() self.show() def initui(self): self.setGeometry(300, 300, 300, 200) self.setWindowTitle('信号与槽') self.QRadio_Yes = QRadioButton("是", self) self.QRadio_Yes.move(40, 20) self.QRadio_No = QRadioButton("否", self) self.QRadio_No.move(40, 40) self.QPush = QPushButton("按下", self) self.QPush_text = QPushButton("由此展示格信号触发效果", self) self.QPush.move(40, 60) self.QPush_text.move(150,150) self.QChek_PWD = QCheckBox("记住密码", self) self.QChek_Login = QCheckBox("自动登录", self) self.QChek_PWD.move(40, 90) self.QChek_Login.move(40, 120) self.QTool = QToolButton(self) self.QTool.setText("目录") self.QTool.move(40, 140) # 设置图标与文字并排显示 self.QTool.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) # 设置弹出模式 self.QTool.setPopupMode(QToolButton.MenuButtonPopup) self.menu = QMenu(self) self.action1 = QAction('QING AN', self) self.action2 = QAction('V: qing_an_an', self) self.menu.addAction(self.action1) self.menu.addAction(self.action2) self.QTool.setMenu(self.menu) if __name__ == '__main__': app = QApplication([]) ex = Example() app.exec()
❝以上是UI的全部代码了。也是本章所有的大致内容,会围绕着这些展开了讲各个信号槽,其中我们使用一个QPushButton来显示一下部分效果。
❞
正题开始;
QPushButton的信号与槽
❝常用三种信号:clicked、pressed、released,看看示例
❞
from PySide6.QtCore import Qt from PySide6.QtGui import QAction from PySide6.QtWidgets import QApplication, QWidget, QPushButton class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initui() self.show() def initui(self): self.setGeometry(300, 300, 300, 200) self.setWindowTitle('信号与槽') self.QPush = QPushButton("按下", self) # self.QPush.clicked.connect(lambda: self.QPush_btn("我被出发了cliked信号")) # 被点击 # self.QPush.pressed.connect(lambda: self.QPush_btn("我被出发了pressed信号")) # 被按下发出信号 self.QPush.released.connect(lambda: self.QPush_btn("我被触发released信号")) # 被释放发出信号 self.QPush_text = QPushButton("由此展示格信号触发效果", self) self.QPush.move(40, 60) self.QPush_text.move(150, 150) def QPush_btn(self, txt): self.QPush_text.setText(txt) if __name__ == '__main__': app = QApplication([]) ex = Example() app.exec()
❝在使用pressed的时候,只要鼠标按下,就会触发,按下与释放使用频率先对点击还是比较的低的。
❞
QRadioButton的信号与槽
❝关于QRadioButton,所使用的不多,记住toggled就好。其他的信号与他关系其实不大。当然你也可以通用clicked。
❞
示例如下:
from PySide6.QtCore import Qt from PySide6.QtGui import QAction from PySide6.QtWidgets import QApplication, QWidget, QRadioButton class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initui() self.show() def initui(self): self.setGeometry(300, 300, 300, 200) self.setWindowTitle('信号与槽') self.QRadio_Yes = QRadioButton("是", self) # self.QRadio_Yes.toggled.connect(lambda: self.QPush_btn("我切换成了是")) self.QRadio_Yes.clicked.connect(lambda: self.QPush_btn("我点击了是")) self.QRadio_Yes.move(40, 20) self.QRadio_No = QRadioButton("否", self) # self.QRadio_No.toggled.connect(lambda: self.QPush_btn("我切换成了否")) self.QRadio_No.clicked.connect(lambda: self.QPush_btn("我点击了否")) self.QRadio_No.move(40, 40) def QPush_btn(self, txt): self.QPush_text.setText(txt) if __name__ == '__main__': app = QApplication([]) ex = Example() app.exec()
QCheckBox信号与槽
❝这个就先对容易了,常用的只需要记住一个即可,那就是toggled
❞
from PySide6.QtCore import Qt from PySide6.QtGui import QAction from PySide6.QtWidgets import QApplication, QWidget, QRadioButton, \ QPushButton, QCheckBox, QToolButton, QMenu class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initui() self.show() def initui(self): self.setGeometry(300, 300, 300, 200) self.setWindowTitle('信号与槽') self.QChek_PWD = QCheckBox("记住密码", self) self.QChek_Login = QCheckBox("自动登录", self) self.QChek_Login.toggled.connect(lambda: self.QPush_btn("我状态切换了")) self.QChek_PWD.move(40, 90) self.QChek_Login.move(40, 120) def QPush_btn(self, txt): self.QPush_text.setText(txt) if __name__ == '__main__': app = QApplication([]) ex = Example() app.exec()
QToolButton信号与槽
❝这个就不多举例了,QPushButton有的他都有。主要讲讲作为下拉框,我们如何知道选中了什么内容,所需要使用到的信号是triggered。
❞
from PySide6.QtCore import Qt from PySide6.QtGui import QAction from PySide6.QtWidgets import QApplication, QWidget, QRadioButton, \ QPushButton, QCheckBox, QToolButton, QMenu class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initui() self.show() def initui(self): self.setGeometry(300, 300, 300, 200) self.setWindowTitle('信号与槽') self.QTool = QToolButton(self) self.QTool.setText("目录") self.QTool.move(40, 140) # 设置图标与文字并排显示 self.QTool.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) # 设置弹出模式 self.QTool.setPopupMode(QToolButton.MenuButtonPopup) self.menu = QMenu(self) self.action1 = QAction('QING AN', self) self.action2 = QAction('V: qing_an_an', self) self.menu.addAction(self.action1) self.menu.addAction(self.action2) self.QTool.setMenu(self.menu) self.menu.triggered.connect(self.QPush_btn) def QPush_btn(self, txt): self.QPush_text.setText(txt.text()) if __name__ == '__main__': app = QApplication([]) ex = Example() app.exec()
❝比较特殊的是,命名连接的槽需要传递一个参数,我却没有传递,这是因为在源码中进行了这项操作了。
❞ ❝还有一个好玩的就是鼠标悬停信号了,hovered。顾名思义就是鼠标悬停在QMenu中的时候就会默认触发信号。 self.menu.hovered.connect(self.QPush_btn) # 鼠标悬停信号自己可以试试效果。
❞