如何解决从另一个文件访问PyQt Gui元素
| 我正在学习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的类继承,如下所示:
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\'
, 好吧,首先,导入fileA.py
时never4ѭ下的代码将永远不会运行,因此fileA.window
不存在。那是应该做的:仅当__name__
为\"__main__\"
时运行,即作为顶级程序运行。相反,您应该导入fileA.py
,再次创建QApplication
和window
,然后访问window.plainTextEdit
。但是,由于您直接从creates14ѭ访问MyApp
中的小部件,因此这在代码之间形成了非常紧密的耦合。相反,最好在MyApp
中公开一个追加到文本框的方法,而不要让fileB.py
直接执行。因此,您可能需要考虑要做什么以及如何构造程序。
当然,您不必那样构建代码;你可以做
window = MyApp()
window.plainTextEdit.appendPlainText(\"Hello\")
如果需要,在fileB
中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。