ラズパイデスクトップでPyQt5入門(4)Submenu,Checkmenu,Contextmenu

こんばんは。國松です。
 今回のPyQt5はSubmenuの作成から始めて行きたいと思います。
参考サイト
 ZetCode PyQt5 tutorial
 【PythonでGUI】PyQt5 -始めの一歩-
Menus and toolbars PyQt5
 3.Submenu
 メニューの中にメニューを作成していきたいと思います。
 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #!/usr/bin/python3 #coding: utf-8 """ This program create a submenu """ import sys from PyQt5.QtWidgets import QMainWindow, QAction, QMenu,QApplication class Example(QMainWindow):     def __init__(self):         super().__init__()         self.initUI()     def initUI(self):         menubar = self.menuBar()         fileMenu = menubar.addMenu('File')         #新しいメニューの追加         impMenu = QMenu('Import',self)         impAct = QAction('Import mail',self)         impMenu.addAction(impAct)         newAct = QAction('New',self)         fileMenu.addAction(newAct)         fileMenu.addMenu(impMenu)         self.setGeometry(300,300,300,200)         self.setWindowTitle('Submenu')         self.show() if __name__ == '__main__':     app = QApplication(sys.argv)     ex = Example()     sys.exit(app.exec_()) | 
impMenu = QMenu(‘Import’,self)
 QMenuで新しいメニューが作成されます。
4.Check menu
 チェックを付けたり外したりできるメニューを作成していきたいと思います。今回はチェックを付けるとステータスバーが表示されチェックを外すとステータスバーは表示されなくなります。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #!/usr/bin/python3 # coding: utf-8 """ This program creates a checkabke menu """ import sys from PyQt5.QtWidgets import QMainWindow, QAction, QApplication class Example(QMainWindow):     def __init__(self):         super().__init__()         self.initUI()     def initUI(self):         self.statusbar = self.statusBar()         self.statusbar.showMessage('Ready')         menubar = self.menuBar()         viewmenu = menubar.addMenu('View')  #オプションを指定してチェック可能なメニューを作成         viewStatAct = QAction('View statusbar', self, checkable=True)         viewStatAct.setStatusTip('View statusbar')         viewStatAct.setChecked(True)         viewStatAct.triggered.connect(self.toggleMenu)         viewmenu.addAction(viewStatAct)         self.setGeometry(300,300,300,200)         self.setWindowTitle('Check menu')         self.show()  #アクションの状態に応じてステータスバー表示,非表示を切り替える     def toggleMenu(self, state):         if state:             self.statusbar.show()         else:              self.statusbar.hide() if __name__ == '__main__':     app = QApplication(sys.argv)     ex = Example()     sys.exit(app.exec_()) | 
5.Context menu
 コンテキストメニューとはGUI内のアイテムをクリックする事でポップアップされるメニューの事で選択したアイテムや操作のオプションを表示します。ショートカットメニューや右クリックとも言われています。
 今回はWindowを右クリックするとNew Open Quitのメニューが出てきます。NewとOpenにはアクションがありませんがQuitを選択するとWindowが閉じます。
 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #!/usr/bin/python3 #coding:utf-8 """ This program creates a contextmenu """ import sys from PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplication class Example(QMainWindow):     def __init__(self):         super().__init__()         self.initUI()     def initUI(self):         self.setGeometry(300,300,300,200)         self.setWindowTitle('Context menu')         self.show()     def contextMenuEvent(self,event):         cmenu = QMenu(self)         newAct = cmenu.addAction("New")         opnAct = cmenu.addAction("Open")         quitAct = cmenu.addAction("Quit")         action = cmenu.exec_(self.mapToGlobal(event.pos()))         if action == quitAct:             qApp.quit() if __name__ == '__main__':     app =QApplication(sys.argv)     ex = Example()     sys.exit(app.exec_()) | 
コンテキストメニューを操作するにはContextMuneEvent()メソッドを再実装する必要があります。
 コンテキストメニューはexec_()メソッドで表示されます。 イベントオブジェクトからマウスポインターの座標を取得します。
 mapToGlobal()メソッドは、ウィジェットの座標をグローバル画面座標に変換します。
 
 

