pyqt 不同窗口怎么相互通讯?

pyqt 不同窗口怎么相互通讯?

在 PyQt 中,不同窗口之间可以使用信号(signal)和槽(slot)的机制进行通信。具体来说,一个窗口可以发出一个信号,另一个窗口可以连接这个信号,并在收到信号时执行对应的槽函数。

以下是一个简单的示例代码,演示了如何在两个窗口之间传递文本数据:

 from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QLineEdit
from PyQt5.QtCore import pyqtSignal, QObject

class Window1(QMainWindow):
    text_changed = pyqtSignal(str)
    
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Window 1')
        self.line_edit = QLineEdit()
        self.line_edit.textChanged.connect(self.on_text_changed)
        self.setCentralWidget(self.line_edit)

    def on_text_changed(self, text):
        self.text_changed.emit(text)


class Window2(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Window 2')
        self.label = QLabel()
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

    def on_text_changed(self, text):
        self.label.setText(text)


class Communicate(QObject):
    text_changed = pyqtSignal(str)


def main():
    app = QApplication([])
    window1 = Window1()
    window2 = Window2()
    communicate = Communicate()
    communicate.text_changed.connect(window2.on_text_changed)
    window1.text_changed.connect(communicate.text_changed)
    window1.show()
    window2.show()
    app.exec_()


if __name__ == '__main__':
    main()

在这个示例中,我们创建了两个窗口 Window1 和 Window2,以及一个通信类 Communicate。Window1 中有一个文本框,当文本框中的文本发生变化时,就会发出 text_changed 信号。Communicate 类中有一个同名的信号,用于将 Window1 的信号连接到 Window2 的槽函数 on_text_changed 中。当 Window2 接收到 text_changed 信号时,就会调用 on_text_changed 方法,将文本设置为标签的文本。

在 main 函数中,我们创建了 Window1、Window2 和 Communicate 的实例,并将它们连接起来。最后,我们显示这两个窗口,启动 PyQt 的事件循环。

这样,当在 Window1 的文本框中输入文本时,Window2 的标签就会立即更新为相同的文本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值