2016-09-15 3 views
0

pyqtの.animateClick()機能を使って、ユーザーがその特定の順序でコピーしなければならないさまざまなボタンのクリックを表示するプログラムがあります。問題はanimateClick()が信号を送信しないようにすることです。ユーザーからのボタンクリック信号のみが必要です。ここで私が意味することを示すためのコードと、その問題を解決しようとした(それはうまくいかない)方法を示します。私は自分のコードをかなり簡略化したので、読みやすく、質問があれば教えてください。フラグは、開始()関数の後に1であることが出ないにもかかわらずPyQtのブロックボタンのクリック信号をブロック

from PyQt4 import QtCore,QtGui 
global flag 
global ai_states 
ai_states = [] 
user_states = [] 


class Program(object): 
    # Set up the push buttons 
    #Code Here. 

    # Connect push buttons to function get_state() 
    self.pushButton.clicked.connect(self.get_state) 
    self.pushButton_2.clicked.connect(self.get_state) 
    self.pushButton_3.clicked.connect(self.get_state)   
    self.pushButton_4.clicked.connect(self.get_state) 

    # Code that starts the start() function 

    def start(self): 
     flag = 0 
     ai_states[:] = [] 
     i = -1 
     # Code here that generates ai_states, numbers 1-4, in any order, based on button numbers. 

     for k in ai_states: 
      i = i + 1 
      # Code here that animates button clicks determined by ai_states 

      # Changes the flag to 1 once the loop ends 
      if i == len(ai_states): 
       flag = 1 

    def get_state(self): 
     if flag == 1: 
      user_states.append(str(self.centralWidget.sender().text())) 
     else: 
      pass 

     if len(user_states) == len(ai_states): 
      # Checks to make sure the user inputted the same clicks as the ai_states 

、それはまだanimatedClick()信号を付加されています。私は間違って何をしていますか?私はGUIプログラミングを初めて学んだので、おそらくこれについては非常に悪い方法でやっています。どんな助けもありがとう。

答えて

1

あなたが本当にする必要がない限り、グローバル変数を使用しないでください。変数への共有アクセスが必要な場合は、インスタンス属性を使用します。

from PyQt4 import QtCore,QtGui 

class Program(object): 
    def __init__(self): 
     self.ai_states = [] 
     self.user_states = [] 
     self.flag = 1 

     # Set up the push buttons 
     # Code Here 

     # Connect push buttons to function get_state() 
     self.pushButton.clicked.connect(self.get_state) 
     self.pushButton_2.clicked.connect(self.get_state) 
     self.pushButton_3.clicked.connect(self.get_state)   
     self.pushButton_4.clicked.connect(self.get_state) 

    # Code that starts the start() function 

    def start(self): 
     self.flag = 0 
     del self.ai_states[:] 
     i = -1 
     # Code here that generates ai_states, numbers 1-4, in any order, based on button numbers. 

     for k in self.ai_states: 
      i = i + 1 
      # Code here that animates button clicks determined by ai_states 

     # Changes the flag to 1 once the loop ends 
     self.flag = 1 

    def get_state(self): 
     if self.flag == 1: 
      self.user_states.append(str(self.centralWidget.sender().text())) 

     if len(self.user_states) == len(self.ai_states): 
      # Checks to make sure the user inputted the same clicks as the ai_states