在PyQt

时间:2016-12-21 11:22:23

标签: python-2.7 pyqt pyqt4 qt-designer pyuic

注意:我已经阅读了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),所以我对它很陌生。所以,即使它只是一个正确方向的指南,那也很棒!

1 个答案:

答案 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模块。