大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

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

著者:國松亜紗子
公開日:2019/09/02
最終更新日:2019/09/02
カテゴリー:技術情報

こんばんは。國松です。
今回のPyQt5はSubmenuの作成から始めて行きたいと思います。

参考サイト
ZetCode PyQt5 tutorial
【PythonでGUI】PyQt5 -始めの一歩-

Menus and toolbars PyQt5
3.Submenu
メニューの中にメニューを作成していきたいと思います。

#!/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
チェックを付けたり外したりできるメニューを作成していきたいと思います。今回はチェックを付けるとステータスバーが表示されチェックを外すとステータスバーは表示されなくなります。

#!/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が閉じます。

#!/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()メソッドは、ウィジェットの座標をグローバル画面座標に変換します。

    上に戻る