ラズパイデスクトップで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()メソッドは、ウィジェットの座標をグローバル画面座標に変換します。