2017-01-02 1 views
0

필자는 코딩 방법을 향상시키고 자 노력 중입니다. TDD 방식을 취하고 싶습니다. 나는 그것에 대한 기사와 튜토리얼을 거의 읽지 않았지만, 실제 사례 나 테스트가 없으면 내 머리 속에 오래 머 무르지 않을 것이므로 나는 많은 훌륭한 세부 사항을 놓치게 될 것이다.메인 코드와 GUI 분리하기

그 이유는 간단한 응용 프로그램을 개발하여 폴더에서 파일 및 디렉토리 연구를하려는 것입니다. 그러나, 여기 내 문제는 : 응용 프로그램과 같은 콘솔이 아니라 GUI를 사용하고 싶습니다.

이미 다른 응용 프로그램 PySide을 이용하여 제가 그 기본을 알고 있지만 난 항상 (내가 아주 나쁜, 알아!)는 TDD 방식에 대한

, 내가 생각하는 UI 및 주요 응용 프로그램 기능을 분리하여 귀찮게 피할

이것이 올바른 방법입니다. 실제로 GUI로 TDD를 할 수 있다는 것을 읽을 수 있습니다. 그래픽 부분은 논리적으로 보너스 레이어가되어야하며 로직 상단에 추가되어야하며 테스트는 먼저 내부 로직을 테스트해야합니다. UI를 어느 정도 수동으로 테스트 할 수 있습니까?

그래서 여기에 질문이 있습니다 : 내 프로그램의 나머지 부분에서 내 UI 클래스 (pyside-uic를 사용하여 생성 된 클래스에서 파생)를 분리하는 방법과 어떻게 의사 소통을 할 수 있습니까? (단순한 응용 프로그램 데이터 IO의 경우에만)? 이 클래스 외부의 신호를 내보내고 사용하려면 어떻게해야합니까?

미리 감사드립니다. 내 영어 writting으로 이해할 수있는 beeing이기를 바랍니다.

마누


편집 : 나의 첫 생각과 판독 서브 클래스 QThread를 통과 신호/슬롯 메커니즘과 통신하는 ...이 절대적으로 필요하고 그것을 할 수있는 유일한 방법이 있나요?

+0

클래스로 별도의 파일에서 애플리케이션 로직과 기능을 구현 my_gui.py, 다음 GUI 파일을 가져옵니다. –

+0

아, 감사합니다! 나는 아직도 설계에있어 불확실하다. 조언에 감사한다. 그래서 별도로 논리를 개발/테스트 한 다음 사용자 입력에 일치 작업이 필요한 경우 GUI 클래스 슬롯에 적절한 클래스와 메서드를 인스턴스화하고 사용합니다. – Manu310

+0

예, 그렇습니다. 적절한 경우 클래스를 사용하여 응용 프로그램 논리를 구현하십시오 (모든 응용 프로그램에 대해 클래스를 사용하는 것이 항상 의미가있는 것은 아닙니다.) 사용 사례에 대해 이해가되지 않으면 함수를 별도의 파일에 구현하고 사용할 파일을 가져올 수 있습니다 함수)를 실행 한 다음 외부 파일을 GUI 스크립트로 가져옵니다. 예를 들어 버튼 이벤트 핸들러에 외부 클래스/라이브러리 중 하나에서 메소드를 호출하게 할 수 있습니다. –

답변

1

기본 응용 프로그램 논리를 클래스로 구현하거나 사용 사례에 맞는 함수 라이브러리를 개별 파일로 구현하십시오. 그런 다음 다른 파일/클래스를 가져 오는 다른 GUI 스크립트 파일을 준비하십시오.

my_example_functions_library.py

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

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

관련 문제