将GUI与主代码

时间:2017-01-02 15:13:41

标签: python-2.7 tdd pyside

我正在尝试改进我的编码方法,我想尝试的一件事是采用TDD方法。我读了很多关于它的文章和教程,但是通常情况下,如果没有实际的例子或测试,这将不会在我的大脑中停留很长时间,我会错过很多细节。

这就是为什么我正在尝试开发一个简单的应用程序来在文件夹中进行文件和目录研究。但是,这是我的问题:我想使用GUI,而不是像应用程序那样的控制台。

我已经将PySide用于其他应用程序并且我知道它的基础知识,但我总是避免分离UI和主要应用程序功能(我知道,非常糟糕!)

对于TDD方法,我认为现在是学习如何做到这一点的合适时机。实际上,我可以阅读使用GUI进行TDD,逻辑上,图形部分必须只是一个“奖励层”,添加在逻辑的顶部,并且测试应首先测试内部逻辑,然后是开发人员可以手动或多或少地手动测试UI ...

所以这里有一个问题:如何将我的UI类(从使用pyside-uic生成的类派生)与我的程序的其余部分分开,如何让它们进行通信(仅对于简单的应用程序数据IO)?如何在此课程之外发出和使用信号?

提前感谢您的帮助和建议,希望我的英文写作能让人理解!

马努

编辑:我的第一个想法和读物是通过子类化QThread并与信号/插槽机制进行通信......这是绝对必要的,也是唯一的方法吗?

1 个答案:

答案 0 :(得分:3)

将您的主应用程序逻辑实现为类,或者,如果这对您的用例没有意义,只需将函数库放在单独的文件中。然后,为GUI脚本创建另一个文件,用于导入其他文件/类。

<强> my_example_functions_library.py

import sys
from PySide import QtGui, QtCore
from my_example_functions_library import *

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):      

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Event handler')
        self.show()

    def keyPressEvent(self, e):

        if e.key() == QtCore.Qt.Key_Enter:
            print_message()

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

<强> my_gui.py

Sub forecast()
    RunPython ("import Forecast; Forecast.data_forecast()")
End Sub