PyQT5 (七十八) PyQt5信号与槽 -用户自定义槽

PyQt5信号与槽 -用户自定义槽

import sys

from PyQt5.QtCore import Qt, QObject, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QHBoxLayout, QPushButton, QMessageBox, QApplication, QVBoxLayout, QWidget

'''
PyQt5信号与槽 -用户自定义槽
'''


# 定义一个槽
class MySlot(QObject):
    def get(self, msg):
        print("信息:" + msg)

    def get1(self, msg, a, b):
        print(msg)
        print(a + b)


class MyTypeSingal(QObject):
    # 定义一个信号
    sendmsg = pyqtSignal(object)
    # 发送三个参数的信号
    sendmsg1 = pyqtSignal(str, int, int)

    def run(self):
        self.sendmsg.emit("你好啊啊啊啊!")
        return "成功"

    def run1(self):
        self.sendmsg1.emit("你好m!", 5, 9)
        return "成功"


class CustomSigalSlotDemo(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 设置定位和左上角坐标
        self.setGeometry(300, 300, 360, 260)
        # 设置窗口标题
        self.setWindowTitle('PyQt5信号与槽 -自定义信号槽 的演示')
        # 设置窗口图标
        # self.setWindowIcon(QIcon('../web.ico'))

        send = MyTypeSingal()
        slot = MySlot()

        # 关联信号和槽
        send.sendmsg.connect(slot.get)
        send.sendmsg1.connect(slot.get1)
        re = send.run()
        print(re)
        self.btn1 = QPushButton('执行自定义槽结果:%s' % re, self)

        re = send.run1()
        print(re)
        self.btn2 = QPushButton('执行自定义槽多参数结果:%s' % re, self)
        self.btn2.move(0,100)
        # 解除信号和槽的关联
        # send.sendmsg.disconnect(slot.get)
        # send.run


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 设置应用图标
    app.setWindowIcon(QIcon('../web.ico'))
    w = CustomSigalSlotDemo()
    w.show()
    sys.exit(app.exec_())

多个信号和多个槽的案例

import sys

from PyQt5.QtCore import Qt, QObject, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QHBoxLayout, QPushButton, QMessageBox, QApplication, QVBoxLayout, QWidget

'''
PyQt5信号与槽 -用户自定义槽
'''


# 定义一个槽
class MySlot(QObject):
    def get(self, msg):
        print("信息:" + msg)

    def get1(self, msg, a, b):
        print(msg)
        print(a + b)


class MyTypeSingal(QObject):
    # 定义一个信号
    sendmsg = pyqtSignal(object)
    # 发送三个参数的信号
    sendmsg1 = pyqtSignal(str, int, int)

    def run(self):
        self.sendmsg.emit("你好啊啊啊啊!")
        return "成功"

    def run1(self):
        self.sendmsg1.emit("你好m!", 5, 9)
        return "成功"

# 多个槽,槽方法的重载
class MultiSignal(QObject):
    signal1 = pyqtSignal()
    signal2 = pyqtSignal(int)
    signal3 = pyqtSignal(int, str)
    signal4 = pyqtSignal(list)
    signal5 = pyqtSignal(dict)
    # 声明一个重载版本的信号,也就是槽函数的参数可以是int和str类型,也可以只有一个str类型的参数
    signal6 = pyqtSignal([int, str], [str])

    def __init__(self):
        super().__init__()
        self.signal1.connect(self.signalCall1)
        self.signal2.connect(self.signalCall2)
        self.signal3.connect(self.signalCall3)
        self.signal4.connect(self.signalCall4)
        self.signal5.connect(self.signalCall5)
        self.signal6[str].connect(self.signalCall6overload)
        self.signal6[int, str].connect(self.signalCall6)

        self.signal1.emit()
        self.signal2.emit(20)
        self.signal3.emit(1, 'Hello word')
        self.signal4.emit([1, 2, 3, 4, 5])
        self.signal5.emit({"name": "孙悟空", "age": 9680098})
        self.signal6[str].emit("快快快看")
        self.signal6[int,str].emit(20, "快快快看")

    def signalCall1(self):
        print("signal1 emit")

    def signalCall1(self):
        print("signal1 emit")

    def signalCall2(self, val):
        print("signal2 emit:", val)

    def signalCall3(self, val, text):
        print("signal3 emit:", val, text)

    def signalCall4(self, val):
        print("signal4 emit:", val)

    def signalCall5(self, val):
        print("signal5 emit:", val)

    def signalCall6(self, val, text):
        print("signal6 emit:", val, text)

    def signalCall6overload(self, val):
        print("signal6 overload emit:", val)


class CustomSigalSlotDemo(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 设置定位和左上角坐标
        self.setGeometry(300, 300, 360, 260)
        # 设置窗口标题
        self.setWindowTitle('PyQt5信号与槽 -自定义信号槽 的演示')
        # 设置窗口图标
        # self.setWindowIcon(QIcon('../web.ico'))

        send = MyTypeSingal()
        slot = MySlot()

        # 关联信号和槽
        send.sendmsg.connect(slot.get)
        send.sendmsg1.connect(slot.get1)
        re = send.run()
        print(re)
        self.btn1 = QPushButton('执行自定义槽结果:%s' % re, self)

        re = send.run1()
        print(re)
        self.btn2 = QPushButton('执行自定义槽多参数结果:%s' % re, self)
        self.btn2.move(0, 100)
        # 解除信号和槽的关联
        # send.sendmsg.disconnect(slot.get)
        # send.run

        # 多个信号槽
        mutiSignal = MultiSignal()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 设置应用图标
    app.setWindowIcon(QIcon('../web.ico'))
    w = CustomSigalSlotDemo()
    w.show()
    sys.exit(app.exec_())

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值