python - 将自定义 pyqtsignal 从一个主窗口发送到另一个主窗口

标签 python pyqt pyqt5 qt-signals

这里是Python初学者。我在 qt 设计器中创建了两个主窗口。在第一个窗口中,我有一个包含三个项目和一个按钮(Button1)的组合框(cb),在另一个窗口中,我有一个 LineEdit(编辑)。当我按下第一个窗口中的按钮时,我想在我在第二个主窗口中创建的 LineEdit 中显示文本(在组合框中选择的当前项目的文本)。

我在网上遵循了几个例子,但我似乎找不到适合我的东西。所有示例都是通过在代码中构建窗口来完成的(而不是 Qt Designer)。在 Qt 设计器上设计窗口的人似乎和我有同样的问题。

如果有人能向我展示如何使用 Qt 设计器设计的窗口发送信号,我将非常感激。这确实可以解决我目前遇到的一个大瓶颈,并且我可以在代码的其他区域实现相同的策略。

import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi


class First_Window(QMainWindow):

    got_signal = pyqtSignal(str)

    def __init__(self):
        super(First_Window,self).__init__()
        loadUi('first_window.ui',self)
        self.setWindowTitle('First Window')
        self.Button1.clicked.connect(self.On_buttonclick_clicked)

    def On_buttonclick_clicked(self):
        self.got_signal.emit(self.cb.currentText())

class Second_Window(QMainWindow):

    def __init__(self):
        super(Second_Window, self).__init__()
        loadUi('second_window.ui', self)
        self.setWindowTitle('Second Window')
        self.dcc = First_Window()
        self.dcc.got_signal.connect(self.show_it)

    def show_it(self, the_signal):
        self.edit.setText(the_signal)
        print(the_signal)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    fw = First_Window()
    fw.show()
    sw = Second_Window()
    sw.show()

    sys.exit(app.exec_())

此代码是我正在处理的代码的简化版本,但它们存在相同的问题。

最佳答案

说明:

主要问题是您创建了 2 个 First_Window:

  • 您用来展示的一个,并且
  • 另一个用于在 got_signal 和 show_it 之间建立连接的位置。

解决方案:

只需创建一个显示的 First_Window 并建立连接:

import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi


class First_Window(QMainWindow):

    got_signal = pyqtSignal(str)

    def __init__(self):
        super(First_Window, self).__init__()
        loadUi("first_window.ui", self)
        self.setWindowTitle("First Window")
        self.Button1.clicked.connect(self.On_buttonclick_clicked)

    def On_buttonclick_clicked(self):
        self.got_signal.emit(self.cb.currentText())


class Second_Window(QMainWindow):
    def __init__(self):
        super(Second_Window, self).__init__()
        loadUi("second_window.ui", self)
        self.setWindowTitle("Second Window")

    def show_it(self, the_signal):
        self.edit.setText(the_signal)
        print(the_signal)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    fw = First_Window()
    fw.show()
    sw = Second_Window()
    sw.show()

    fw.got_signal.connect(sw.show_it)

    sys.exit(app.exec_())

关于python - 将自定义 pyqtsignal 从一个主窗口发送到另一个主窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59291386/

相关文章:

python - 什么会导致 WordNetCorpusReader 没有属性 LazyCorpusLoader?

python - 如何增加pyqt4中QTableWidget中标题标签的行高和行项目的字体大小

macos - 如果从 finder 执行应用程序包但从命令行运行良好,则使用 python 构建的 OSX 应用程序会立即退出

python - QSqlTableModel setFilter 参数过多

python - 超过一类的神经网络不起作用

python - 测试全类属性

python - 如何将一行编辑的焦点更改为另一行编辑

python - 我如何转换 .在PyQt5的QLineEdit中输入0.?

python - 如何在qtdesigner中使用qss中的qrc资源?

python - 编写 CSV 以存储在 Google Cloud Storage 中