Python 3.x 来自窗口的pyqt信号不改变主窗口小部件

Python 3.x 来自窗口的pyqt信号不改变主窗口小部件,python-3.x,pyqt5,qt-designer,Python 3.x,Pyqt5,Qt Designer,我可以使用信号在两个窗口之间传递值, 当我按下另一个窗口的按钮时,我想更改纯文本。 但是insertPlainText甚至text.show()都不起作用 我试着把信号发送到主窗口的初始化部分, 尝试过更新、重新绘制,但都不起作用 感谢您的帮助,谢谢 类SearchWindow到MainWindow方法测试中的search\u发送方法_ class MainWindow(QtWidgets.QMainWindow): def __init__(self): super(

我可以使用信号在两个窗口之间传递值, 当我按下另一个窗口的按钮时,我想更改纯文本。 但是insertPlainText甚至text.show()都不起作用

我试着把信号发送到主窗口的初始化部分, 尝试过更新、重新绘制,但都不起作用

感谢您的帮助,谢谢


类SearchWindow到MainWindow方法测试中的search\u发送方法_

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.tag_box.hide()

    def test_(self, i): # -------problem here------------------
        print(i)  // <- value here were right
        self.ui.tag_box.insertPlainText(i)  # -------Plain Text does not change-------
        self.ui.tag_box.show()# -------Plain Text does not show either--------------


class SearchWindow(QtWidgets.QMainWindow):
    
    signal=pyqtSignal(str)

    def __init__(self, endpoint=None, user=None, password=None, points_link=None):
        super(SearchWindow, self).__init__()
        self.ui = Ui_Search()
        self.ui.setupUi(self)
        self.ui.pushButton_2.clicked.connect(self.search_send)

    def search_send(self): # -------problem here------------------
        tag_list = [tag1,tag2, tag3]
        otherClass = MainWindow()
        self.signal.connect(otherClass.test_)
        for k in tag_list:
            self.signal.emit(k)

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
class主窗口(QtWidgets.QMainWindow):
定义初始化(自):
超级(主窗口,自我)。\uuuu初始化
self.ui=ui_Dialog()
self.ui.setupUi(self)
self.ui.tag_box.hide()
def test(self,i):————这里有问题------------------

print(i)/由于我们不清楚
Ui\u对话框
包含什么内容,我无法准确判断出哪里出了问题,但可以告诉您应该如何使用信号

这是将文本传输到
插槽的
信号的示例。PyQt5中的名称可能不同-相应地更改

from PySide2.QtWidgets import QWidget, QApplication, QPlainTextEdit, QTextEdit, QVBoxLayout
from PySide2.QtCore import Signal, Slot
import sys


class MainWindow(QWidget):
    sig = Signal(str)

    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("Main")
        self.layout = QVBoxLayout()
        self.text = QTextEdit()
        self.layout.addWidget(self.text)
        self.setLayout(self.layout)

        self.text.textChanged.connect(self.onChange)

    def onChange(self):
        self.sig.emit(self.text.toPlainText())


class SubWindow(QWidget):

    def __init__(self, connect_target: MainWindow):
        super(SubWindow, self).__init__()
        self.setWindowTitle("Sub")
        self.layout = QVBoxLayout()
        self.text = QPlainTextEdit()
        self.layout.addWidget(self.text)
        self.setLayout(self.layout)

        connect_target.sig.connect(self.onSignal)

    @Slot(str)
    def onSignal(self, text):
        self.text.insertPlainText(text + '\r\n')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    window_sub = SubWindow(window)
    window_sub.show()
    sys.exit(app.exec_())
Main中的任何内容都将根据需要插入到QPlainTextEdit中


请提供一个@S.Nick抱歉,更新了粘贴副本时双反斜杠会出错的内容。谢谢你的更新。这不是mre。首先,您没有发布
Ui\u对话框
的内容,也没有发布
Ui\u搜索
的内容。此外,您不会显示搜索窗口是如何创建的。i、 e.是否在用户按下按钮时创建?无论如何,代码的问题在于,在
SearchWindow.search\u send
中,您正在创建
MainWindow
的第二个实例(未显示),并将信号连接到第二个实例的插槽,而不是显示的原始插槽。您需要将信号连接到
窗口的插槽
。如何做到这一点取决于搜索窗口的创建/管理方式。@Heike很抱歉没有发布ui内容,我认为我陷入了一个基本的概念中,有人可能不编译我的代码就明白了,然后你来了,你确实解决了我的问题,通过将MainWindow()更改为window,它工作得很好,非常感谢!!原来我用错插槽接收信号了,谢谢你的回复