2016-08-28 56 views
2

我沒有收到任何錯誤消息,但for循環不會產生與顯式語句相同的結果。 kp是類的一個實例,key0-9是該類的子元素。我想要做的事情實際上工作?如果是,那麼也許是關於如何構建PyQt4類的問題。Python for循環不能按預期工作

這工作:

def open_kp1(self, kp, le): 
    self.inputStr = le.text() 
    kp.key1.clicked.disconnect() 
    kp.key2.clicked.disconnect() 
    kp.key3.clicked.disconnect() 
    kp.key4.clicked.disconnect() 
    kp.key5.clicked.disconnect() 
    kp.key6.clicked.disconnect() 
    kp.key7.clicked.disconnect() 
    kp.key8.clicked.disconnect() 
    kp.key9.clicked.disconnect() 
    kp.key0.clicked.disconnect() 
    ... more code 

這不:

def open_kp1(self, kp, le): 
    self.inputStr = le.text() 
    key_list = (kp.key1, kp.key2, kp.key3, kp.key4, kp.key5, kp.key6, kp.key7, 
      kp.key8, kp.key9, kp.key0) 
    for key in key_list: 
     key.clicked.disconnect() 
    ... more code 
+0

其他,我不知道我看到了差距 –

+0

嗯,是有區別的:當一些由'斷開()觸發''修改KP .key?',第二個版本仍然會使用舊的參考。 – dhke

+0

@dhke好吧,這將是一個可怕的設計:'disconnect'方法在'clicked'對象上。無論如何不知道這些物體是什麼,我們無法說出。但在99%的情況下,它是一樣的,OP的經歷是另一回事,即xy問題。 – freakish

回答

-1

什麼似乎是問題是,當你在for循環調用斷開()函數,可能會出現一些錯誤列表取決於你正在使用的範圍或者在循環中運行函數的一些約束。

一個很好的調試方法是運行這段代碼,看看代碼實際上給出了錯誤的位置,這樣你就可以在這裏提供更多的輸入供人們回答。

def open_kp1(self, kp, le): 
    self.inputStr = le.text() 
    key_list = (kp.key1, kp.key2, kp.key3, kp.key4, kp.key5, kp.key6, kp.key7,kp.key8, kp.key9, kp.key0) 
    print(key_list) # print the list to verify the list is indeed intact 
    for key in key_list: 
     print(key) # verify if something indeed is the problem with individual key or if the code ever enters the for loop. 
     key.clicked.disconnect() 
    ... more code 

你需要驗證的是該列表確實存儲指針,因爲你打算。

此外,在一個側面說明這是一個很好的做法,以調試模式運行你的應用程序,讓你得到的東西的情況下一個詳細的描述開始橫盤整理,並上傳到這裏的痕跡。

編輯:拼寫比你使用一個元組,而不是一個列表