将实例存储在python中的变量中

时间:2013-04-02 11:41:55

标签: python input pyqt4 instances

在我的Pyqt4程序中,我想更改某些按钮的快捷方式。因为我有很多想法通过用户输入访问按钮。我复制了相关的代码片段。

    self.btn3 = QtGui.QPushButton(self)

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

所以用户会输入“btn3”,然后在另一个输入对话框中指定新的快捷方式。最后,我想更改按钮快捷键,如下所示:

    self.b.setShortcut(newkey)

我收到错误,我的QMainWindow类没有属性“b”。

是否无法在变量中存储实例?或者也许阅读变量或其他东西?如果你能帮助我,我会很高兴...

1 个答案:

答案 0 :(得分:4)

这里的问题是当你执行b时,python不会从self.b.setShortcut(newkey)获取值,而只是查找名称b

您可以使用getattr()执行所需操作:

getattr(self, b).setShortcut(newkey)

然而,这是不好的风格,通常会不安全并导致问题。相反,建立一个适合您需要的数据结构 - 这里创建一个字典是有意义的,例如:

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