注意:我已经阅读了this帖子,但遗憾的是我并不理解。 我有一个像这样的目录设置:
Main_Folder
|_ Base_Gui_File.py
|_ Child_directory (a directory inside Main_Folder)
|_ __init__.py
|_ some_other.py
我已经获得Base_Gui_File.py
文件中的所有GUI代码,该代码是从designer
(PyQt4)生成的。有一个文本输入字段QLineEdit
,一个按钮QPushButton
和一个文本区QTextBrowser
。
默认隐藏QTextBrowser
。但是,我想要做的是,当某人在QLineEdit
中输入内容并点击QPushButton
时,它会将QLineEdit
中的字符串发送到some_other.py
中的某个方法{1}}中的{1}}文件。在对该字符串执行某些操作后,Child_Directory
文件中的方法将some_other.py
show
中的QTextBrowser
,并在Base_Gui_File.py
中打印一些内容。< / p>
到目前为止,我已经能够通过从QTextBrowser
获取输入,将字符串从Base_GUI_File.py
发送到some_other.py
文件。这是两个文件的代码:
some_other.py :
QLineEdit
Base_Gui_file.py :
import sys
sys.path.append("..")
from Base_Gui_File import Ui_MainWindow
class childone(object):
"""docstring for childone"""
def __init__(self):
super(childone, self).__init__()
def somemethod(self, url):
pass
print 'Hey!'
final_string = str(url) + "Just tying this!"
print final_string
我该怎么办?我2天前开始使用GUI和OO编程(Python),所以我对它很陌生。所以,即使它只是一个正确方向的指南,那也很棒!
答案 0 :(得分:1)
正如我在回答中所说:编辑由pyuic
生成的模块总是错误的。它是一个导入主程序的静态模块。
此外,程序的当前结构向后看。主脚本应位于顶层,所有模块应位于其下方的包中。这将确保您不需要进行任何奇怪的sys.path
操作来导入您自己的模块。这是结构应该是什么样的:
program
|_ main.py
|_ package
|_ __init__.py
|_ app.py
|_ gui.py
|_ utils.py
您的main.py
脚本应该非常简单,如下所示:
if __name__ == '__main__':
import sys
from package import app
sys.exit(app.run())
以这种方式执行操作非常重要,因为此脚本的路径将成为sys.path
中的第一个条目。这意味着您可以在程序中的任何其他模块中执行from package import xxx
,并且导入将始终正常运行。
app
模块应如下所示:
import sys
from PyQt4 import QtCore, QtGui
from package.gui import Ui_MainWindow
from package import utils
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.MyPushButton.clicked.connect(self.download_click)
def download_click(self):
self.MyTextArea.textCursor().insertHtml('Hello World!')
url = str(self.MyTextField.text())
utils.some_func(url)
def run():
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
return app.exec_()
请注意,我已将您对gui模块所做的编辑移动到app模块中。 MainWindow
类将引入您在Qt Designer中添加的所有小部件,它们将成为类实例的属性。因此,一旦重新安排了程序,就应该使用pyuic
重新生成gui模块。