今天是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) # 鼠标悬停信号自己可以试试效果。
❞
最后附上源代码gitee地址: https://gitee.com/qinganan_admin/Pyside6_Information/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0%EF%BC%8C%E6%8C%89%E9%92%AE/%E4%BF%A1%E5%8F%B7%E4%B8%8E%E6%A7%BD.py