どうも!たっくんです。
QMainWindowでウインドウでツールを作っていると、メニューとツールバーに共通のActionを追加したい時があります。
QActionのインスタンスを作ると、簡単に使いまわしができる方法をご紹介したいと思います!∠( ゚д゚)/
クラスの骨格
QMainWindowを継承して、Actionの実行用に「open」と「save」のメソッドをラフに用意しておきます!
from PySide import QtCore, QtGui class MainWindow(QtGui.QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) def open(self): print 'Open' def save(self): print 'Save'
QActionのインスタンス
まず、QActionのインスタンスを、OpenとSaveを用意します。
from PySide import QtCore, QtGui class MainWindow(QtGui.QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) openAct = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_DialogOpenButton), 'Open', self) openAct.triggered.connect(self.open) saveAct = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_DialogSaveButton), 'Save', self) saveAct.triggered.connect(self.save) def open(self): print 'Open' def save(self): print 'Save'
メニューに追加
用意したQActionのインスタンスを、QMainWindowのメニューに追加します!
from PySide import QtCore, QtGui class MainWindow(QtGui.QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) openAct = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_DialogOpenButton), 'Open', self) openAct.triggered.connect(self.open) saveAct = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_DialogSaveButton), 'Save', self) saveAct.triggered.connect(self.save) menuBar = self.menuBar() menu = menuBar.addMenu('File') menu.addAction(openAct) menu.addAction(saveAct) def open(self): print 'Open' def save(self): print 'Save'
ツールバーに追加
QActionのインスタンスを使いまわして、QMainWindowのツールバーにも追加します!
from PySide import QtCore, QtGui class MainWindow(QtGui.QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) openAct = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_DialogOpenButton), 'Open', self) openAct.triggered.connect(self.open) saveAct = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_DialogSaveButton), 'Save', self) saveAct.triggered.connect(self.save) menuBar = self.menuBar() menu = menuBar.addMenu('File') menu.addAction(openAct) menu.addAction(saveAct) toolBar = self.addToolBar('File') toolBar.addAction(openAct) toolBar.addAction(saveAct) def open(self): print 'Open' def save(self): print 'Save'
確認!
MainWindowを表示してみると、メニューとツールバーに同じActionが追加されます!