pyqt 5-メニューとツールバー

12177 ワード

メニューとツールバー
この章では、ステータスバー、メニュー、ツールバーを作成します.メニューは、メニューバーにあるコマンドのセットです.ツールバーは、適用される一般的なツールボタンです.ステータスバーには、通常、適用の下部にステータス情報が表示されます.
メインウィンドウ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の中間領域に配置されます.このコンポーネントは、残りのすべての領域を満たしています.
プログラムのプレビュー: