pyqt 5-メニューとツールバー
メニューとツールバー
この章では、ステータスバー、メニュー、ツールバーを作成します.メニューは、メニューバーにあるコマンドのセットです.ツールバーは、適用される一般的なツールボタンです.ステータスバーには、通常、適用の下部にステータス情報が表示されます.
メインウィンドウ
メインウィンドウは以下のウィンドウの総称なので、チュートリアルは一番下にあります.
ステータスバー
ステータスバーは、適用されたステータス情報を表示するためのコンポーネントです.
ステータスバーはQMainWindowによって作成されます.
プログラムのプレビュー:
メニューバー
メニューバーはよく使われます.コマンドのセットです(Mac OSではステータスバーの表示が異なり、最も似たような外観を得るために
アプリケーションを終了するコマンドが1つしかないメニューバーを作成しました.ステータスバーも作成されました.また、ショートカットキー
この指定した動作を実行すると、イベントがトリガーされます.このイベントは
プログラムのプレビュー:
サブメニュー
サブメニューは、メニューにネストされた2級や3級などのメニューです.
この例では、2つのサブメニューがあり、1つはfileメニューの下、1つはfileのimportの下にあります.
プログラムのプレビュー:
チェックメニュー
メニューをチェックできる例を次に示します
この例では、動作メニューを作成します.この動作/動作はステータスバーの表示または非表示を切り替えることができます.
選択可能なメニューを
既定では選択されています.
選択した状態に応じてステータスバーの表示を切り替えます.プログラムのプレビュー:
右クリックメニュー
右クリックメニューもポップアップ(?)と呼ばれ、は、ある場合に表示されるコマンドのセットです.たとえば、Operaブラウザでは、Webページの右クリックメニューにリフレッシュ、戻ったり、ページソースコードを表示したりします.ツールバーを右クリックすると、ツールバーを管理するためのメニューが異なります.
やはり
右クリックメニューでイベントがトリガーされると、終了イベントがトリガーされ、メニューを閉じる動作が実行されます.
プログラムのプレビュー:
ツールバー
メニューバーにはすべてのコマンドが含まれており、ツールバーはよく使われるコマンドの集合です.
上記の例では、ツールバーを作成しました.このツールバーには、アプリケーションを終了するアクションが1つしかありません.
上のメニューバーとはあまり差がありません.ここでは、ラベル、アイコン、ショートカットキーをバインドした動作オブジェクトを使用します.これらの動作がトリガーされると、
ツールバーを表示します.
プログラムのプレビュー:
メインウィンドウ
メインウィンドウは上の3つの欄の総称で、今では上の3つの欄を1つのアプリケーションに展示しています.
まず自分で小さなアイコンを作ってexit 24と名付けます.png
上のコードは古典的なメニューフレームワークを作成し、右クリックメニュー、ツールバー、ステータスバーがあります.
ここにテキスト編集領域が作成され、
プログラムのプレビュー:
この章では、ステータスバー、メニュー、ツールバーを作成します.メニューは、メニューバーにあるコマンドのセットです.ツールバーは、適用される一般的なツールボタンです.ステータスバーには、通常、適用の下部にステータス情報が表示されます.
メインウィンドウ
QMainWindow
は、メインウィンドウの機能を提供し、簡単なステータスバー、ツールバー、メニューバーを作成することができます.メインウィンドウは以下のウィンドウの総称なので、チュートリアルは一番下にあります.
ステータスバー
ステータスバーは、適用されたステータス情報を表示するためのコンポーネントです.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a statusbar.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
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_())
ステータスバーはQMainWindowによって作成されます.
self.statusBar().showMessage('Ready')
QtGui.QMainWindow
クラスのstatusBar()
メソッドを呼び出し、ステータスバーを作成します.最初の呼び出しでステータスバーを作成し、ステータスバーオブジェクトを返します.showMessage()
メソッドステータスバーにメッセージを表示します.プログラムのプレビュー:
メニューバー
メニューバーはよく使われます.コマンドのセットです(Mac OSではステータスバーの表示が異なり、最も似たような外観を得るために
menubar.setNativeMenuBar(False)
を追加しました).#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a menubar. The
menubar has one menu with an exit action.
Author: Jan Bodnar
Website: zetcode.com
Last edited: January 2017
"""
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIcon
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
exitAct = QAction(QIcon('exit.png'), '&Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip('Exit application')
exitAct.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAct)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Simple menu')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
アプリケーションを終了するコマンドが1つしかないメニューバーを作成しました.ステータスバーも作成されました.また、ショートカットキー
Ctrl+Q
を使用してアプリケーションを終了することもできる.exitAct = QAction(QIcon('exit.png'), '&Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip('Exit application')
QAction
は、メニューバー、ツールバー、またはショートカットキーの動作の組み合わせである.前の2行では、アイコン、exitのラベル、ショートカットキーの組み合わせを作成し、アクションを実行しました.3行目には、メニューバーにマウスを置くと現在のステータスが表示されるステータスバーが作成されます.exitAct.triggered.connect(qApp.quit)
この指定した動作を実行すると、イベントがトリガーされます.このイベントは
QApplication quit()
の動作に関連しているので、この動作はこのアプリケーションを終了することができる.menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAct)
menuBar()
メニューバーを作成します.ここにメニューバーが作成され、fileメニューが追加され、クリックしてアプリケーションを終了するイベントが関連付けられています.プログラムのプレビュー:
サブメニュー
サブメニューは、メニューにネストされた2級や3級などのメニューです.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a submenu.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
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_())
この例では、2つのサブメニューがあり、1つはfileメニューの下、1つはfileのimportの下にあります.
impMenu = QMenu('Import', self)
QMenu
を使用して、新しいメニューを作成します.impAct = QAction('Import mail', self)
impMenu.addAction(impAct)
addAction
を使用してアクションを追加します.プログラムのプレビュー:
チェックメニュー
メニューをチェックできる例を次に示します
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a checkable menu.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
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_())
この例では、動作メニューを作成します.この動作/動作はステータスバーの表示または非表示を切り替えることができます.
viewStatAct = QAction('View statusbar', self, checkable=True)
選択可能なメニューを
checkable
オプションで作成します.viewStatAct.setChecked(True)
既定では選択されています.
def toggleMenu(self, state):
if state:
self.statusbar.show()
else:
self.statusbar.hide()
選択した状態に応じてステータスバーの表示を切り替えます.プログラムのプレビュー:
右クリックメニュー
右クリックメニューもポップアップ(?)と呼ばれ、は、ある場合に表示されるコマンドのセットです.たとえば、Operaブラウザでは、Webページの右クリックメニューにリフレッシュ、戻ったり、ページソースコードを表示したりします.ツールバーを右クリックすると、ツールバーを管理するためのメニューが異なります.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a context menu.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
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_())
やはり
contextMenuEvent()
の方法でこのメニューを実現します.action = cmenu.exec_(self.mapToGlobal(event.pos()))
exec_()
メソッドを使用してメニューを表示します.マウスの右クリックイベントオブジェクトから現在の座標を取得します.mapToGlobal()
メソッドは、現在のコンポーネントの相対座標をウィンドウの絶対座標に変換する.if action == quitAct:
qApp.quit()
右クリックメニューでイベントがトリガーされると、終了イベントがトリガーされ、メニューを閉じる動作が実行されます.
プログラムのプレビュー:
ツールバー
メニューバーにはすべてのコマンドが含まれており、ツールバーはよく使われるコマンドの集合です.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a toolbar.
The toolbar has one action, which
terminates the application, if triggered.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIcon
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
exitAct = QAction(QIcon('exit24.png'), 'Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.triggered.connect(qApp.quit)
self.toolbar = self.addToolBar('Exit')
self.toolbar.addAction(exitAct)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Toolbar')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
上記の例では、ツールバーを作成しました.このツールバーには、アプリケーションを終了するアクションが1つしかありません.
exitAct = QAction(QIcon('exit24.png'), 'Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.triggered.connect(qApp.quit)
上のメニューバーとはあまり差がありません.ここでは、ラベル、アイコン、ショートカットキーをバインドした動作オブジェクトを使用します.これらの動作がトリガーされると、
QtGui.QMainWindow
のquitメソッドが呼び出されてアプリケーションが終了する.self.toolbar = self.addToolBar('Exit')
self.toolbar.addAction(exitAct)
ツールバーを表示します.
プログラムのプレビュー:
メインウィンドウ
メインウィンドウは上の3つの欄の総称で、今では上の3つの欄を1つのアプリケーションに展示しています.
まず自分で小さなアイコンを作ってexit 24と名付けます.png
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a skeleton of
a classic GUI application with a menubar,
toolbar, statusbar, and a central widget.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
:923414804
"""
import sys
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication
from PyQt5.QtGui import QIcon
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
textEdit = QTextEdit()
self.setCentralWidget(textEdit)
exitAct = QAction(QIcon('exit24.png'), 'Exit', self)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip('Exit application')
exitAct.triggered.connect(self.close)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAct)
toolbar = self.addToolBar('Exit')
toolbar.addAction(exitAct)
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('Main window')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
上のコードは古典的なメニューフレームワークを作成し、右クリックメニュー、ツールバー、ステータスバーがあります.
textEdit = QTextEdit()
self.setCentralWidget(textEdit)
ここにテキスト編集領域が作成され、
QMainWindow
の中間領域に配置されます.このコンポーネントは、残りのすべての領域を満たしています.プログラムのプレビュー: