PyQt5: メニューとツールバー
1. メインウィンドウ
QMainWindow
メイン ウィンドウの機能を提供し、それを使用していくつかの単純なステータス バー、ツールバー、メニュー バーを作成します。
メインウィンドウは以下のウィンドウの総称であり、チュートリアルは以下となります。
2. ステータスバー
ステータス バーは、アプリケーションのステータス情報を表示するために使用されるコンポーネントです。
self.statusBar().showMessage('Ready')
ステータスバーはQMainWindow
によって作成されました。statusBar()
ステータスバーを作成するメソッド。最初の呼び出しはステータス バーを作成し、2 番目の呼び出しはステータス バー オブジェクトを返します。showMessage()
メソッドはステータス バーにメッセージを表示します。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.statusBar().showMessage('Ready')
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Statusbar')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
3. メニューバー
メニューバーは非常によく使われます。これはコマンドのコレクションです (Mac OS でのステータス バーの表示は異なります。最も類似した外観を得るには、ステートメントの行を追加できます
menubar.setNativeMenuBar(False)
)。
QAction
これは、メニュー バー、ツールバー、またはショートカット キーのアクションの組み合わせです。上記の 3 行のうち、最初の 2 行はアイコン、終了ラベル、ショートカット キーの組み合わせを作成し、これらはすべてアクションを実行します。3 行目はステータス バーを作成し、マウスをメニューの上に置いたときに表示できます。バー: 現在のステータスを表示します。
exitAct = QAction(QIcon('./Resources/images/icon.ico'), '&Exit', self)
アイコン、テキストexitAct.setShortcut('Ctrl+Q')
ショートカットキーexitAct.setStatusTip('退出应用')
ステータスバープロンプトexitAct.triggered.connect(qApp.quit)
この指定されたアクションが実行されると、イベントがトリガーされます。このイベントQApplication的quit()
はアクションに関連付けられているため、このアクションによりアプリケーションが終了します。
self.menuBar()
メニューバーを作成します。ここでは、メニュー バーが作成され、addMenu() を使用してファイル メニューが追加され、クリックしてアプリケーションを終了するイベントが addAction() に関連付けられています。fileMenu = menubar.addMenu('&File')
ファイルメニューを追加しましたfileMenu.addAction(exitAct)
クリックしてアプリケーションを終了するイベントに関連付けられますexitAct
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMenu
from PyQt5.QtGui import QIcon
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('菜单栏')
icon = QIcon(":/images/logo")
self.setWindowIcon(icon)
self.setGeometry(300, 300, 300, 200)
self.initUI()
self.show()
def initUI(self):
exitAct = QAction(QIcon('./Resources/images/icon.ico'), '&Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip('退出应用')
exitAct.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
newMenu = menubar.addMenu('新建')
fileMenu.addAction(exitAct)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
3.1 サブメニュー
サブメニューは、メニュー内にネストされた 2 番目または 3 番目のレベルのメニューです。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMenu
from PyQt5.QtGui import QIcon
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('子单栏')
icon = QIcon("./Resources/images/icon.ico")
self.setWindowIcon(icon)
self.setGeometry(300, 300, 300, 200)
self.initUI()
self.show()
def initUI(self):
exitAct = QAction(QIcon('./Resources/images/icon.ico'), '&Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip('退出应用')
exitAct.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
newMenu = QMenu('新建', self)
impMenu = QMenu('Import', self)
impAct = QAction('Import mail', self)
impMenu.addAction(impAct)
fileMenu.addMenu(newMenu)
fileMenu.addMenu(impMenu)
fileMenu.addAction(exitAct)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
3.2 メニューの確認
viewStatAct = QAction('View statusbar', self, checkable=True)
オプションを含むcheckable
選択可能なメニューを作成します。viewStatAct.setStatusTip('View statusbar')
ステータスバープロンプトviewStatAct.setChecked(True)
メニューを選択viewStatAct.triggered.connect(self.toggleMenu)
この指定されたアクションが実行されると、イベントがトリガーされますself.toggleMenu
。- イベント
self.toggleMenu
中のself.statusbar.show()、self.statusbar.hide()
ステータスバープロンプトの表示/非表示
import sys
from PyQt5.QtWidgets import QApplication, QAction, QMainWindow
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_())
3.3 右クリックメニュー
右クリックメニューはポップアップボックスとも呼ばれ、アプリケーション上でマウスの右ボタンをクリックすると表示され、特定の場面で表示されるコマンド群です。たとえば、Opera ブラウザでは、Web ページを右クリックしてメニューを更新したり、ページのソース コードに戻ったり、表示したりできます。ツールバーを右クリックすると、ツールバーを管理するための別のメニューが表示されます。
contextMenuEvent()
このメニューを実装するにはメソッドを使用しますaction = cmenu.exec_(self.mapToGlobal(event.pos()))
使用exec_()
状況表示メニュー。マウスの右ボタンのイベント オブジェクトから現在の座標を取得します。mapToGlobal()
このメソッドは、現在のコンポーネントの相対座標をウィンドウの絶対座標に変換します。if action == quitAct:
右クリックメニューでイベントが発生した場合quitAct
、メニューを閉じる動作を実行しますqApp.quit()
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtGui import QIcon
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('右键菜单')
icon = QIcon('./Resources/images/icon.ico')
self.setWindowIcon(icon)
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_())
4. ツールバー
メニュー バーにはすべてのコマンドが含まれており、ツールバーにはよく使用されるコマンドが集められています。
self.toolbar = self.addToolBar('Exit')
ツールバーの作成self.toolbar.addAction(exitAct)
アクションオブジェクトをツールバーに追加する