【问题标题】:Accesing PyQt Gui elements from another file从另一个文件访问 PyQt Gui 元素
【发布时间】:2011-06-04 11:35:02
【问题描述】:

我正在学习 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")

我做错了什么?如果不是这样,将功能传播到多个文件的最佳方法是什么?

感谢您花时间阅读本文。

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    您可以利用 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'
    

    【讨论】:

      【解决方案2】:

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

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

      window = MyApp()
      window.plainTextEdit.appendPlainText("Hello")
      

      如果您愿意,请在fileB 中。

      【讨论】:

        猜你喜欢
        • 2013-05-30
        • 1970-01-01
        • 2017-05-06
        • 2013-01-23
        • 2020-06-22
        • 1970-01-01
        • 2011-10-15
        • 1970-01-01
        相关资源
        最近更新 更多