2013-04-17 1 views
1

이 내가 간단한 식 계산기 구현하기 위해 노력하고있어 클래스 : 간단한에 대한Qt를 PySide 내장 된 신호 슬롯에 연결할 때

class mainWindow(QtGui.QMainWindow, mainGui.Ui_MainWindow): 

    def __init__(*args, **kwargs) 
     super(mainWindow, self).__init__(*args, **kwargs) 
     self.setupUi(self) 
     self.connecting_range_displays() 

    def connecting_range_displays(self):  
     ranges = num_ranges() 
     first_range = num_ranges.ones_range 
     second_range = num_ranges.tens_range 

     print first_range 
     print second_range 

     self.top_lineEdit.setText(str(first_range)) 
     self.bottom_lineEdit.setText(str(second_range)) 

     ex_a = first_range + second_range 
     print "this is expressions answer", ex_a 

     self.answer_lineEdit.returnPressed.connect(self.ex_evaluator) 

    def ex_evaluator(self, right_answer): 
     answer = self.answer_lineEdit.text() 

     if ex_a == right_answer: 
      print "Correct answer bucko" 

위의 코드에서를 산술 연습 응용 프로그램 두 개의 라인을 사용하여 특정 범위의 난수를 표시하고 세 번째 QlineEditanswer_lineEdit을 사용하여 사용자 입력을 얻은 다음 그 숫자가 SignalreturnPressed 인 올바른지 확인한 다음 ex_evaluator에 연결합니다. 당신이 올바른 응답을 주었다면 당신에게 말해라. 문제는 내가 함수 ex_a을 t에 넘길 수없는 것 같다. o 그것을 평가할 수 있는지, 네임 스페이스 문제 일 수 있는지, 나는 코드 작성에 꽤 새로운 것, 그리고 나의 철학은 내가 원하는 곳으로 나를 데려가는 데 최소한의 양을 배우는 것입니다. 그래서 어떻게해야 하는지를 배워야하는지 궁금합니다. 내가 어떻게 해야할지 전혀 모르는 QLineEdit을 서브 클래스 화하기 위해, 아마도 내가 데려 가고 싶지 않은 또 다른 양동이가 장식자를 도울 수 있음을 알았다.

+0

QSignalMapper를 사용할 수 있습니다. http://srinikom.github.io/pyside-docs/PySide/QtCore/QSignalMapper.html –

답변

3

는 다음 중 하나를 수행해야합니다

  • 메이크업은 "self.ex_a"으로 변경하여 클래스 속성을 ex_a. 그런 다음 슬롯 (ex_evaluator) 두 번째 옵션의 경우 람다 또는 functools.partial

을 사용하는 클래스

  • 패스가 내 어느 곳에서나 사용할 수 있습니다, 나는이 일을 두 가지 방법을 설명하는 튜토리얼을 썼다 :

    : 그것은이 같은 것의 functools.partial를 들어

    self.answer_lineEdit.returnPressed.connect(lambda ans=ex_a: self.ex_evaluator(ans)) 
    

    : http://www.blog.pythonlibrary.org/2013/04/10/pyside-connecting-multiple-widgets-to-the-same-slot/

    은 같은 것을 할, 람다를 사용하려면
    import functools 
    callback = partial(self.ex_evaluator, ex_a) 
    self.answer_lineEdit.returnPressed.connect(callback) 
    

    마지막 하나를 모르면 documentation을 살펴 보시기 바랍니다.

  • +0

    self.ex_a를 적용하여 범위를 변경하면 다른 방법도 시도 할 것입니다. 더 깊은 바다에서 수영을 시작하려면, 나는 어젯밤에 당신의 블로그를 북마크했습니다. 질문을 게시하기 전에 도움을 주셔서 감사합니다 –

    +0

    괜찮습니다. 다행히 도울 수있어. –

    관련 문제