MenuとToolBarでActionを使いまわす方法!!

takkun
どうも!たっくんです。

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が追加されます!