0

私の Pyqt4 プログラムでは、いくつかのボタンのショートカットを変更したいと考えています。かなりの数があるので、ユーザー入力を通じてボタンにアクセスすることを考えました。関連するコード スニペットをコピーしました。

    self.btn3 = QtGui.QPushButton(self)

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

たとえば、ユーザーは「btn3」と入力し、別の入力ダイアログで新しいショートカットを指定します。最後に、ボタンのショートカットを次のように変更します。

    self.b.setShortcut(newkey)

QMainWindow クラスに属性 "b" がないというエラーが表示されます。

インスタンスを変数に格納する方法はありませんか? それとも、変数か何かを読んでいますか?お役に立てれば幸いです...

4

1 に答える 1

4

ここでの問題は、Python がbルックアップの値を取得しないことです。self.b.setShortcut(newkey)名前を検索するだけbです。

次を使用して、必要なことを実行できますgetattr()

getattr(self, b).setShortcut(newkey)

ただし、これは悪いスタイルであり、一般的に安全ではなく、問題を引き起こします。代わりに、ニーズに合ったデータ構造を作成してください。たとえば、次のように辞書を作成するのが理にかなっています。

self.widgets = {"btn3": QtGui.QPushButton(self)}
...
self.widgets[b].setShortcut(newkey)
于 2013-04-02T11:52:41.400 に答える