PyQt 玩转 pyqtSignal 自定义信号,如何让多页面之间进行通信

PyQt pyqtSignal 自定义信号实例讲解,多页面信息传递

个人认为pyqtSignal是pyqt里非常实用的一个接口,是 PyQt5 提供的自定义信号类; 其用法比较灵活,特别适合用于多页面之间的信号,信息传递,其继承自QtCore类。

基本用法:
信号传递方法:可以传递的信息,可以说是基本上覆盖了Python的所有数据类型。

pyqtSignal(str)  # 传递字符串数据
pyqtSignal(list)  # 传递列表数据
pyqtSignal(tuple)  # 传递元祖数据
pyqtSignal(dict)  # 传递字典数据

其用法可归纳为:

1、定义信号 diy_signal = pyqtSignal(str);
2、信号激发:diy_signal.emit(需传递的数据);
3、接收信号:diy_signal.connect(激发的槽函数)。

可以看出pyqtSignal和pyqt的信号与槽用法非常类似。
都有信号的激发,信号与槽函数的链接过程。如:QPushButton().clicked.connect(click_func)。
只不过其信号相对于按钮的点击而言,为自定义信号。

实例用法:
我们先来试着用pyqtsignal信号来完成以下的需求:
有两个父子页面,当子页面被创建和关闭时,父页面显示子页面状态信息。
完成最终效果:
完成效果

先创建父页面类:

#  导入模块
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt,pyqtSignal
from PyQt5.QtGui import QFont

# 创建父页面类
class Parents_Widget(QWidget):
    def __init__(self):
        super(Parents_Widget, self).__init__()
        # 页面基础设置
        # 设置窗口标题
        self.setWindowTitle('父页面')
        # 设置页面尺寸
        self.resize(500,200)
        # 创建Label控件
        # 页面标题label
        self.label_0 = QLabel
  • 46
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在 PyQt 中,可以使用 PyQt5.QtCore.pyqtSignal() 创建一个自定义信号。 下面是一个简单的示例: ``` from PyQt5.QtCore import pyqtSignal class MyWidget(QWidget): my_signal = pyqtSignal() def __init__(self): super().__init__() # ... def my_slot(self): print("my_slot called") def my_function(self): self.my_signal.emit() # 使用信号和槽 my_widget = MyWidget() my_widget.my_signal.connect(my_widget.my_slot) my_widget.my_function() # 输出 "my_slot called" ``` 这个例子中,我们定义了一个名为 my_signal信号,并在 my_function() 方法中发射了它。我们还定义了一个名为 my_slot 的槽函数,并将其连接到 my_signal 信号上。当 my_function() 被调用时,my_signal 就会被发射,导致 my_slot() 被调用。 ### 回答2: PyQtPython语言中的一个常用图形用户界面编程框架,可以用于开发各种跨平台的GUI程序。在PyQt中,我们可以通过自定义信号来实现不同对象之间的消息传递和交互。 要创建自定义信号,首先需要创建一个信号提供者类。可以使用QObject来创建信号提供者类,然后在该类中定义自定义信号。例如,我们可以创建一个名为MySignal信号提供者类,并在其中定义一个自定义信号my_signal。 ```python from PyQt5.QtCore import QObject, pyqtSignal class MySignal(QObject): # 定义自定义信号 my_signal = pyqtSignal(str, int) def __init__(self): super().__init__() def emit_signal(self): # 发送自定义信号 self.my_signal.emit("Hello", 123) ``` 接下来,我们可以创建一个信号接收者类来接收并处理自定义信号。在该类中,我们需要定义一个槽函数来处理自定义信号。 ```python from PyQt5.QtCore import QObject, pyqtSlot class MyReceiver(QObject): @pyqtSlot(str, int) def handle_signal(self, message, number): # 处理自定义信号 print("Received message:", message) print("Received number:", number) ``` 在主程序中,我们可以实例化信号提供者和信号接收者,然后使用自定义信号进行消息传递。 ```python from PyQt5.QtWidgets import QApplication import sys if __name__ == '__main__': app = QApplication(sys.argv) signal_provider = MySignal() signal_receiver = MyReceiver() # 连接自定义信号和槽函数 signal_provider.my_signal.connect(signal_receiver.handle_signal) # 发送自定义信号 signal_provider.emit_signal() sys.exit(app.exec_()) ``` 上述代码中,我们在信号提供者类中定义了一个自定义信号my_signal,并在发出信号时使用了emit方法。在信号接收者类中,我们通过pyqtSlot装饰器将handle_signal方法标记为接收my_signal信号的槽函数。在主程序中,我们使用connect方法将自定义信号和槽函数连接起来,并使用emit_signal方法发送自定义信号,从而触发槽函数的执行。 通过上述步骤,我们可以自定义信号来实现不同对象之间的消息传递和交互。自定义信号PyQt中非常强大且常用的功能之一,可以帮助我们构建更灵活和交互性更强的GUI程序。 ### 回答3: 在PyQt中,我们可以使用QtCore模块中的pyqtSignal类来创建自定义信号。下面是一个使用300字中文回答的示例: PyQt中,如果我们想要创建一个自定义信号,首先需要导入QtCore模块中的pyqtSignal类。然后,我们可以通过在类中定义一个pyqtSignal对象来创建自定义信号。 要使用自定义信号,我们可以将其与一个特定事件关联。例如,我们可以创建一个名为CustomSignal自定义信号,并将其与按钮的点击事件关联。这样,当按钮被点击时,CustomSignal自定义信号会被发出。 下面是一个简单的示例: from PyQt5.QtCore import QObject, pyqtSignal from PyQt5.QtWidgets import QApplication, QPushButton import sys class CustomSignal(QObject): # 创建一个自定义信号 custom_signal = pyqtSignal() class MyWindow(QPushButton): def __init__(self): super().__init__() self.clicked.connect(self.emit_signal) def emit_signal(self): # 发出自定义信号 self.custom_signal.emit() if __name__ == '__main__': app = QApplication(sys.argv) signal = CustomSignal() window = MyWindow() window.custom_signal.connect(lambda: print('自定义信号触发')) window.show() sys.exit(app.exec_()) 在上面的示例中,我们创建了一个名为CustomSignal自定义信号,并在MyWindow类中将其与按钮的点击事件关联。当按钮被点击时,自定义信号会被发出,并触发与其连接的函数。在这个例子中,我们连接了一个lambda函数,当自定义信号被触发时,它会打印出"自定义信号触发"。 这是一个简单的示例,展示了如何使用pyqtSignal类创建一个自定义信号。根据具体的应用场景,我们可以根据需要定义自己的信号信号处理函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值