2017-01-02 5 views
0

Я пытаюсь улучшить свой метод кодирования, и одна вещь, которую я хотел бы попробовать, - принять подход TDD. Я читал немало статей и руководств об этом, но так часто, без практических примеров или тестирования, это не будет долго оставаться в моем мозгу, и я пропущу множество мелких деталей.Отделив GUI от основного кода

Именно поэтому я пытаюсь разработать простое приложение для создания файлов и поиска каталогов в папках. Однако, вот моя проблема: я хотел бы использовать графический интерфейс, а не консольное приложение.

Я уже использую PySide для других приложений, и я знаю ее основу, но я всегда избегал утруждая разделение интерфейса и основных приложения функции (я знаю, очень плохо!)

Для TDD подхода, я думаю, это подходящее время, чтобы узнать, как это сделать. Действительно, я мог бы прочитать, что для TDD с графическим интерфейсом графическая часть должна, по логике, просто быть «бонусным слоем», добавленной в верхней части логики, и что тесты должны сначала протестировать внутреннюю логику, а затем что разработчик может тестировать UI более или менее вручную ...

Итак, вот вопрос: как отделить мой класс пользовательского интерфейса (производный от класса, сгенерированного с помощью pyside-uic) от остальной части моей программы, и как я могу заставить их общаться (для простых данных приложения IO только тогда)? Как я могу испускать и использовать сигналы за пределами этого класса?

Заранее благодарим вас за помощь и советы, надеясь, что я буду понятен моим английским наречием!

Ману


EDIT: Мои первые мысли и чтения проходят через подклассы QThread и взаимодействовать с механизмом сигналов/слотов ... абсолютно необходимо, и единственным способом сделать это Является ли это?

+0

Реализация логики приложения и функции в отдельных файлах в виде классов, а затем импортировать их в файл графического интерфейса пользователя. –

+0

О да, спасибо! Я все еще не уверен в дизайне оо, поэтому большое спасибо за совет. Поэтому я разрабатываю/проверяю свою логику отдельно, а затем, я инициализирую и использую соответствующие классы и методы в своих слотах класса GUI, когда пользовательский ввод требует согласования действий? – Manu310

+0

В значительной степени, да. Внедрите свою прикладную логику с помощью классов (при необходимости, не всегда имеет смысл использовать классы для каждого приложения. Если это не имеет смысла для вашего варианта использования, вы можете просто реализовать функции в отдельных файлах и импортировать эти файлы для использования функции), затем импортируйте внешние файлы в свой графический интерфейс. Например, вы можете иметь обработчик событий кнопки, просто вызывая метод из одного из этих внешних классов/библиотек. –

ответ

1

Реализовать свою основную логику приложения как классы или, если это не имеет смысла для вашего использования, просто библиотеки функций в отдельных файлах. Затем добавьте другой файл для своего графического интерфейса, который импортирует ваши другие файлы/классы.

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() 
+1

Спасибо, очень точный!Я попробую это очень скоро (я работаю только над этим коротким проектом, поскольку боковая работа формирует мои основные проекты)! – Manu310

Смежные вопросы