QActionでコードもすっきり
メニューやツールバーを実装するときはQPushButtonやコールバックをガリガリ書くのではなくQActionを作る。QActionオブジェクトを作成しておけば、複数のメニューやツールバーをまたいでも、ひとつのQActionオブジェクトで挙動を定義できるし、QActionGroupを使えばラジオボタンも作れる。ショートカットキーやIconも設定できる。
import sys from PySide.QtCore import * from PySide.QtGui import * # ラジオボタン的な挙動をするメニューを作る例 if __name__ == '__main__': myapp = QApplication(sys.argv) window = QMainWindow() # まずはExclusiveなグループを作成 exclusive_group = QActionGroup(window) exclusive_group.setExclusive(True) # グループに属するアクションを作る def createExclusiveAction(in_name, in_icon, in_shortcut): action = QAction(in_name, window) action.setActionGroup(exclusive_group) action.setIcon(myapp.style().standardIcon(in_icon)) action.setShortcut(in_shortcut) action.setCheckable(True) return action data = [ ('Play', QStyle.SP_MediaPlay, 'Q'), ('Pause', QStyle.SP_MediaPause, 'W'), ('Stop', QStyle.SP_MediaStop, 'E'), ('Forward', QStyle.SP_MediaSeekForward, 'R'), ('Backward', QStyle.SP_MediaSeekBackward, 'T'), ] actions = [] for name, icon, shortcut in data: actions.append(createExclusiveAction(name, icon, shortcut)) # メニューバーとツールバー両方に追加して動作テスト menubar = window.menuBar() mediamenu = menubar.addMenu('Media') toolbar = window.addToolBar('ToolBar') for x in actions: mediamenu.addAction(x) toolbar.addAction(x) window.show() sys.exit(myapp.exec_())