2013-04-17 43 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,然後告訴你,如果你給出了正確的回答,問題似乎是我不能通過函數t的ex_a參數o能夠評估它,它可能是命名空間問題,我是一個非常新的編碼,我的理念是隻學習最少量讓我到我想要的地方,所以我想知道如果我將不得不學習如何爲了繼承QLineEdit,我不知道該怎麼做,我看到裝飾器可能會有幫助,這是我不想進入的另一個麻煩。

+0

您可以使用QSignalMapper:http://srinikom.github.io/pyside-docs/PySide/QtCore/QSignalMapper.html –

回答

3

你需要做以下之一:

  • 化妝通過改變它是「self.ex_a」 ex_a類屬性。然後,它可以從任何地方類
  • 傳中被用來使用lambda或functools.partial

對於第二個選項插槽(ex_evaluator),我寫了說明這樣做的兩種方式教程: http://www.blog.pythonlibrary.org/2013/04/10/pyside-connecting-multiple-widgets-to-the-same-slot/

使用lambda,做這樣的事情:

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

對於functools.partial,這將是這樣的:

import functools 
callback = partial(self.ex_evaluator, ex_a) 
self.answer_lineEdit.returnPressed.connect(callback) 

如果你不明白最後一個,你可能想看看documentation

+0

通過應用self.ex_a改變範圍工作,將嘗試其他方式,以及似乎我需要開始在更深的水域游泳,我昨天在發佈這個問題前寫下你的博客。謝謝你的幫助 –

+0

沒問題。很高興我能幫上忙 –