Pyside6-第六篇-各按钮的信号与槽

简介: Pyside6-第六篇-各按钮的信号与槽

今天是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)       # 鼠标悬停信号自己可以试试效果。



目录
相关文章
|
1月前
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
47 0
|
10月前
Pyside6-第四篇-QCheckBox复选框
Pyside6-第四篇-QCheckBox复选框
439 0
Pyside6-第四篇-QCheckBox复选框
|
1月前
|
图形学 C++ 容器
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
|
15天前
Qt 信号槽(笔记)
Qt 信号槽(笔记)
|
1月前
|
C++ 开发者 UED
C++ Qt开发:MdiArea多窗体组件
QMdiArea(Multiple Document Interface Area)是Qt中用于创建多文档界面的组件。它提供了一种在单个窗口中管理多个文档的方式,每个文档通常是一个子窗口(`QMdiSubWindow`)。该组件主要用于设计多文档界面应用程序,具备有多种窗体展示风格,实现了在父窗体中内嵌多种子窗体的功能,使开发者能够轻松地创建支持多个文档的应用程序。
94 0
C++ Qt开发:MdiArea多窗体组件
|
1月前
|
编译器 C++ 开发者
QT基础【5-信号与槽】
QT基础【5-信号与槽】
|
10月前
Pyside6-第三篇-QToolButton一个的按钮
Pyside6-第三篇-QToolButton一个的按钮
176 0
|
10月前
Pyside6-第二篇-QPushButton一个普通按钮
Pyside6-第二篇-QPushButton一个普通按钮
200 0
|
1月前
|
C++
C++ Qt开发:自定义Dialog对话框组件
在之前的文章中笔者已经为大家展示了默认`Dialog`组件的使用方法,虽然内置组件支持对数据的输入,但有时候我们需要一次性输入多个数据,此时如果之使用默认模态对话框似乎不太够用,此时我们需要自己创建一个自定义对话框,需要说明的是此类对话框也是一种窗体,所以可以在其上面放置任何通用组件,以实现更多复杂的开发需求。自定义对话框需要解决的问题是,如何让父窗体与子窗体进行数据交换,要实现数据的交换有两种方式,第一种方式是通过动态加载模态对话框,当用户点击确定后通过`GetValue()`来拿到数据,而第二种方式则是通过发送信号的方式将数据投递给父窗体,这两种方式都可以,读者可根据自身需求来选择不同的通
56 1
C++ Qt开发:自定义Dialog对话框组件
|
1月前
Qt6学习笔记二(信号槽)
Qt6学习笔记二(信号槽)
63 0