在它的类之外访问PyQT小部件

时间:2015-09-30 20:25:55

标签: python python-2.7 class pyqt qtextedit

一个简单的情况证明相当棘手。

我的目标是获得一个窗口来更新另一个窗口中窗口小部件的状态。 解释:

我有一些带有“数据”的窗口A,我希望它写入窗口B的textEdit小部件。主窗口和小部件的细节是

&

我目前无法获得的是一个简单的方法,从另一个窗口调用(和另一个文件)可以更改textEdit中的内容。 不确定我做错了什么,但是当我尝试从类中导入类或方法时,我似乎总是遇到问题

  

TypeError:必须使用调用unbound方法updEdit()   MainWin实例作为第一个参数(没有取而代之)

我非常乐于接受建议,并提前感谢!

编辑#1

从文件Rep.py(我正在调用的第二个窗口)

class MainWin(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(1127, 880)

        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.textEdit = QtGui.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(20, 150, 1081, 661))
        self.textEdit.setObjectName(_fromUtf8("textEdit"))
        self.textEdit.isUndoRedoEnabled ()

从第一个窗口,我需要做的就是:

def addTemplate(self):
        data = self.textBrowser.toPlainText()
        MainWin.MainWin.addText(MainWindow.MainWin,data)
        self.close()

我对OOP相当新,所以如果有一些相当愚蠢的错误,请原谅我。

1 个答案:

答案 0 :(得分:0)

创建第二个窗口时,传入对第一个窗口的引用并将其存储为属性:

class SecondWindow(QMainWindow):
    def __init__(self, firstwindow, parent=None):
        super(SecondWindow, self).__init__(parent)
        self.firstwindow = firstwindow
        ...            

    def addTemplate(self):
        data = self.textBrowser.toPlainText()
        self.firstwindow.addText(data)

如果第二个窗口是QMainWindowQDialog,您还可以将第一个窗口作为第二个窗口的父窗口 - 在这种情况下,不需要将其存储为属性你可以做到:

        self.parent().addText(data)

这样做也意味着第一个窗口关闭时第二个窗口将自动关闭。