2013-04-02 105 views
0

在我的Pyqt4程序中,我想更改某些按鈕的快捷方式。由於我有很多我想通過用戶輸入訪問按鈕。我複製了相關的代碼片段。將變量存儲在python中

self.btn3 = QtGui.QPushButton(self) 

    b, ok = QtGui.QInputDialog.getText(self, 'Keyboard Mapping', 
      "Enter button number: ") 

所以用戶會輸入「btn3」,然後在另一個輸入對話框中指定新的快捷方式。最後,我想改變這樣的按鈕快捷鍵:

self.b.setShortcut(newkey) 

我得到一個錯誤,我的QMainWindow類沒有屬性「b」。

有沒有辦法在變量中存儲實例?或者也許讀取變量或東西?我會很高興,如果你能幫助我...

+0

你從來沒有定義'self.b',爲什麼你認爲它的存在?你的意思是'self.btn3'嗎? –

+0

沒有「b」是用戶輸入的「btn3」,所以我想將「btn3」字符串存儲在「b」變量中,然後用它作爲實例 –

回答

4

這裏的問題是,當你做self.b.setShortcut(newkey),python不會從b的值爲查找,而只是尋找名稱b

你可以做你想要使用的是什麼getattr()

getattr(self, b).setShortcut(newkey) 

然而,這是不好的風格,一般是不安全的,導致問題。相反,做出適合您需要的數據結構 - 這將是有意義的創建字典,例如:

self.widgets = {"btn3": QtGui.QPushButton(self)} 
... 
self.widgets[b].setShortcut(newkey) 
+0

非常感謝,我會將答案標記爲我儘快接受。 –