从另一个文件访问PyQt Gui元素

时间:2011-06-04 02:15:37

标签: python pyqt

我正在学习PyQt并且来自网页设计,所以请原谅这个必须有非常明显答案的问题。所以我正在构建一个PyQt应用程序,我想将方法​​传播到几个文件以对应GUI的不同部分。如何从fileB.py访问fileA.py中的文本框。 :

#fileA.py
import sys
from PyQt4 import QtGui, QtCore
from gui1 import Ui_MainWindow
import fileB

class MyApp(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)


if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        window = MyApp()
        window.show()

        #This works all fine
        def pressed():
            window.plainTextEdit.appendPlainText("Hello")


        window.pushButton.pressed.connect(pressed)


        window.button2.pressed.connect(fileB.func3)
        sys.exit(app.exec_())    

现在,在这个文件中我想使用fileA.py

中的文本框
#fileB.py
import fileA

    #How do I access window.plainTextEdit from fileA.py
def func3():
    print "hello"
    fileA.window.plainTextEdit.appendPlainText("Hello")

我做错了什么?将功能扩展到多个文件的最佳方法是什么?

感谢您花时间阅读本文。

2 个答案:

答案 0 :(得分:2)

您可以利用Python的类继承,如下所示:

<强> fileA.py

import sys
from PyQt4 import QtGui, QtCore
from gui1 import Ui_MainWindow
import fileB

class MyApp(fileB.MyApp, QtGui.QMainWindow):
  def __init__(self):
     self.MyMethod()
     # Should print 'foo'

<强> fileB.py

import sys
from PyQt4 import QtGui, QtCore
from gui1 import Ui_MainWindow

class MyApp(QtGui.QMainWindow):
  def MyMethod(self):
    print 'foo'

答案 1 :(得分:1)

首先,当您导入if __name__ == "__main__"时,fileA.py下的代码将从不运行,因此fileA.window不存在。它应该做的是:仅在__name__"__main__"时运行,即作为顶级程序运行。相反,您应该导入fileA.py,再次创建QApplicationwindow,然后访问window.plainTextEdit。但是,这会在代码之间产生非常紧密的耦合,因为您直接从MyApp访问fileB中的小部件。如果相反,您可能会更好地在MyApp中公开一个附加到文本框而不是让fileB.py直接执行此操作的方法。所以你可能想要考虑你想做什么以及如何构建你的程序。

当然,你没有 以这种方式构建你的代码;你可以简单地做

window = MyApp()
window.plainTextEdit.appendPlainText("Hello")
如果你愿意,可以在fileB