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_())