pyside6界面开发笔记(04)

信号与槽

一个信号连接一个槽

按钮的clicked信号与自定义的change_text()槽函数连接起来

import sys
from PySide6.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super(Window,self).__init__()
        self.btn=QPushButton('开始',self)
        self.btn.clicked.connect(self.change_text)

    def change_text(self):
        if self.btn.text()=='开始':
            self.btn.setText('停止')
        else:
            self.btn.setText('开始')

if __name__ == '__main__':
    app=QApplication([])

    window=Window()
    window.show()

    sys.exit(app.exec())

每个控件都有相应内置信号,比如QPushButton控件有clicked、pressed等

信号可以传值

import sys
from PySide6.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super(Window,self).__init__()
        self.resize(180,30)

        line=QLineEdit(self)
        line.textChanged.connect(self.show_text)

    # a是show_text的一个参数,textChanged信号携带的值会传给这个参数
    def show_text(self,a):
        print(a)

if __name__ == '__main__':
    app=QApplication([])

    window=Window()
    window.show()

    sys.exit(app.exec())

当信号无法传值而又需要传值时,可以使用lambda匿名函数

import sys
from PySide6.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super(Window,self).__init__()
        btn=QPushButton('开始',self)

        btn.clicked.connect(lambda:btn.setText('停止'))

if __name__ == '__main__':
    app=QApplication([])

    window=Window()
    window.show()

    sys.exit(app.exec())

一个信号连接多个槽

信号发射一次,调用多个槽函数

import sys
from PySide6.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super(Window,self).__init__()
        self.btn=QPushButton('开始',self)
        self.btn.clicked.connect(self.change_text)
        self.btn.clicked.connect(self.change_size)

    def change_text(self):
        if self.btn.text()=='开始':
            self.btn.setText('停止')
        else:
            self.btn.setText('开始')

    def change_size(self):
        self.btn.resize(150,30)

if __name__ == '__main__':
    app=QApplication([])

    window=Window()
    window.show()

    sys.exit(app.exec())

多个信号连接一个槽

import sys
from PySide6.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super(Window,self).__init__()
        self.btn=QPushButton('开始',self)
        
        #按下
        self.btn.pressed.connect(self.change_text)
        #松开
        self.btn.released.connect(self.change_text)

    def change_text(self):
        if self.btn.text()=='开始':
            self.btn.setText('停止')
        else:
            self.btn.setText('开始')

if __name__ == '__main__':
    app=QApplication([])

    window=Window()
    window.show()

    sys.exit(app.exec())

信号与信号连接

import sys
from PySide6.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super(Window,self).__init__()
        self.btn=QPushButton('开始',self)

        self.btn.pressed.connect(self.btn.released)
        self.btn.released.connect(self.change_text)

    def change_text(self):
        if self.btn.text()=='开始':
            self.btn.setText('停止')
        else:
            self.btn.setText('开始')

if __name__ == '__main__':
    app=QApplication([])

    window=Window()
    window.show()

    sys.exit(app.exec())

自定义信号

  • 创建自定义信号

自定义信号通过Signal来创建

import sys
from PySide6.QtCore import *
from PySide6.QtWidgets import *

class Window(QWidget):
    my_signal=Signal()

    def __init__(self):
        super(Window,self).__init__()
        self.my_signal.connect(self.my_slot)

    def my_slot(self):
        print(self.width())
        print(self.height())

    # 鼠标按下事件
    def mousePressEvent(self, event):
        self.my_signal.emit()
        
if __name__ == '__main__':
    app=QApplication([])

    window=Window()
    window.show()

    sys.exit(app.exec())
  • 让自定义信号携带值
import sys
from PySide6.QtCore import *
from PySide6.QtWidgets import *

class Window(QWidget):
    my_signal=Signal(int,int)

    def __init__(self):
        super(Window,self).__init__()
        self.my_signal.connect(self.my_slot)

    def my_slot(self,x,y):
        print(x)
        print(y)

    # 鼠标按下事件
    def mousePressEvent(self, event):
        x=event.pos().x()
        y=event.pos().y()
        self.my_signal.emit(x,y)

if __name__ == '__main__':
    app=QApplication([])

    window=Window()
    window.show()

    sys.exit(app.exec())

笔记笔者根据《Pyqt编程快速上手》将其中pyqt改为pyside整理而成,所有代码均经过验证

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pyside6是一个用于创建跨平台图形用户界面(GUI)的Python库。当你在使用Pyside6时,可能会遇到一些界面显示异常的情况。这些异常可能包括但不限于界面元素错位、颜色异常、布局问题等。 解决Pyside6界面显示异常的方法有以下几种: 1. 检查代码逻辑:首先,你需要检查你的代码逻辑是否正确。确保你正确地设置了界面元素的位置、大小和属性。检查你的布局管理器是否正确地放置了界面元素。 2. 检查样式表:Pyside6支持使用样式表来自定义界面的外观。如果你使用了样式表,那么可能是样式表中的某些属性设置不正确导致了界面显示异常。请检查你的样式表并确保其中的属性设置正确。 3. 检查版本兼容性:Pyside6可能与不同版本的Python和操作系统存在兼容性问题。请确保你使用的Pyside6版本与你的Python版本和操作系统版本兼容。 4. 更新Pyside6:如果你使用的是旧版本的Pyside6,可能存在已知的界面显示异常问题。尝试更新到最新版本的Pyside6,以获得修复了这些问题的新功能和改进。 5. 查找文档和社区支持:如果以上方法都无法解决你的问题,建议查阅Pyside6的官方文档和社区支持。在官方文档中,你可以找到更多关于Pyside6的使用方法和常见问题的解答。同时,社区支持也是一个很好的资源,你可以在社区中提问并获得其他开发者的帮助和经验分享。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值