【问题标题】:Separating GUI from main code将 GUI 与主代码分离
【发布时间】:2017-01-04 22:51:34
【问题描述】:

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

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

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

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

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

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

手动


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

【问题讨论】:

  • 在单独的文件中以类的形式实现应用程序逻辑和功能,然后将它们导入您的 GUI 文件。
  • 哦,是的,谢谢!我对oo设计仍然很不确定,所以非常感谢您的建议。因此,我分别开发/测试我的逻辑,然后,当用户输入需要匹配操作时,我在我的 GUI 类槽中实例化并使用适当的类和方法?
  • 差不多,是的。使用类实现您的应用程序逻辑(如果合适;为每个应用程序使用类并不总是有意义。如果对您的用例没有意义,您可以在单独的文件中实现函数并导入这些文件以使用函数),然后将外部文件导入您的 GUI 脚本。例如,您可以让按钮事件处理程序简单地从这些外部类/库之一调用方法。
  • 我会用一个更具体的例子来添加答案。

标签: python-2.7 tdd pyside


【解决方案1】:

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

my_example_functions_library.py

import sys
def print_message():
    print "You pressed the `Enter` key!"

my_gui.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()

【讨论】:

  • 非常感谢,非常准确!我很快就会尝试(我只在这个简短的项目上工作,作为我的主要项目的副业)!
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
相关资源
最近更新 更多