簡體   English   中英

從另一個文件訪問 PyQt Gui 元素

[英]Accesing PyQt Gui elements from another file

我正在學習 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 的 class inheritance,如下所示:

文件A.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'

文件B.py

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

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

好吧,首先,當您導入fileA.py時, if __name__ == "__main__"下的代碼將永遠不會運行,因此fileA.window不存在。 這就是它應該做的:僅在__name__"__main__"時運行,即作為頂級程序運行。 相反,您應該導入fileA.py ,再次創建QApplicationwindow ,然后訪問window.plainTextEdit 但是,這會在代碼之間產生非常緊密的耦合,因為您直接從fileB訪問MyApp中的小部件。 相反,如果您在MyApp中公開一個附加到文本框的方法,而不是讓fileB.py直接執行它,這可能會更好。 因此,您可能需要考慮您想要做什么以及如何構建您的程序。

當然,您不必以這種方式構建代碼。 你可以簡單地做

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

如果您願意,可以在fileB中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM