前回の記事「デスクトップアプリ化して配布 -その1 ウィンドウを作成-」で空のデスクトップを作成したので、その続きとして、メニューとステータスバーをを配置していきます。
-
-
参考【python】【PyQt5】デスクトップアプリ化して配布 -その1 ウィンドウを作成-
続きを見る
本記事の内容
- メニューの配置
- メニューのアクションの設定
今回の記事では、次のようなメニューを追加していきます。

app.batを変更
今回は新しく、main_view2.pyを作成していきます。
サンプルコードをダウンロードされた方は、app.batを次のように変更してください。
@echo off call _internal\setenv.bat "%PYTHON_EXECUTABLE%" "%APP_ROOT%\main_view2.py" pause
main_view2.pyを起動するように変更しています。
app.batを実行するとデスクトップアプリが起動するようになっています。
メニューの配置
前回の記事「デスクトップアプリ化して配布 -その1 ウィンドウを作成-」では、以下のような空のWindowを作成しました。
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class MainWindow(QMainWindow):
def __init__(self) -> None:
super(MainWindow, self).__init__()
self.resize(QSize(600, 500))
self.setWindowTitle('app')
def get_main_app(argv=[]):
app = QApplication(argv)
win = MainWindow()
win.show()
return app, win
if __name__ == '__main__':
app, _win = get_main_app(sys.argv)
sys.exit(app.exec_())

これをベースに、メニューを追加していきます。
追加する場所は、MainViewの__init__の中です。
次のコードを追加します。
# メニューの追加
self.menus = {'File': self.menuBar().addMenu('File'),
'Edit': self.menuBar().addMenu('Edit'),
'Help': self.menuBar().addMenu('Help'),}
QMainWindowのmenuBarでメニューを追加します。
作成されたメニューはmenusに、dict型でまとめて入れておきます。
これだけでは、メニューから実行するアクションが設定できていません。
メニューのアクションを設定
メニューのアクションを設定していきます。
アクションはQActionを使って設定していきます。
メニュー表示テキストのみだけでなく、iconやショートカットの設定もあるので、まとめて設定できるように関数にします。
def new_action(parent, text, slot=None, shortcut=None, icon=None, tip=None, enabled=True):
"""actionの設定と取得"""
# アクション取得
a = QAction(text, parent)
# icon設定 iconsフォルダから取得
if icon is not None:
a.setIcon(QIcon('icons/'+icon))
# ショートカット作成
if shortcut is not None:
if isinstance(shortcut, (list, tuple)):
a.setShortcuts(shortcut)
else:
a.setShortcut(shortcut)
# ステータスバーに表示するTip
if tip is not None:
a.setToolTip(tip)
a.setStatusTip(tip)
# 押したときの動作
if slot is not None:
a.triggered.connect(slot)
# ロックするか
a.setEnabled(enabled)
return a
関数の引数は以下の役割を持っています。
| 引数 | 役割 |
|---|---|
| text | メニューの文字列。 |
| solt | メニューのアクション。処理する関数を指定する。 |
| shortcut | 'Ctrl+Q'などショートカットを指定。 |
| icon | メニューに表示するicon。iconsフォルダから読み込むようになっています。 |
| tip | カーソルがメニュー上にきたときに、ステータスバーに表示するコメント。 |
| enable | メニューをロックするかどうか。 |
この関数を使って、アクションを設定していきましょう。
File>quitとHelp>infomationの二つを設定し、Editは何もしていない状態です。
# アクションを設定する
quit = new_action(self,
text='quit',
slot=self.close,
shortcut='Ctrl+Q',
icon='quit',
tip='quitApp')
show_info = new_action(self,
text='information',
slot=self.show_info,
tip='show app information')
self.menus['File'].addAction(quit)
self.menus['Help'].addAction(show_info)
やっていることは
処理流れ
- new_actionでアクションを設定して取得
- menusにaddActionでアクションを設定
アクションで実行される関数を作成
quitではself.close、infomationではself.show_infoがslotに設定されています。
self.closeは、QMainWindowのアプリ終了のメソッドなので、何もしなくて良いですが、self.show_infoはメソッドを用意します。
def show_info(self):
""" Helpメニュ用メソッド """
print("desktop app")
ただ、printを動かしているだけです。
メニューに独自の処理を実装する場合は、このように実装してください。
ステータスバーの設定
最後のに、メニューのTip(補助メッセージ)を表示する、ステータスバーを設定しておきます。
# ステータスバー self.statusBar()
これで、メニューつきのデスクトップアプリになりました。
完成したmain_view2.pyはgit hubのコードを参照ください。<参照コード>
次はQToolBarを使って、ツールバーを追加していきたいと思います。
-
-
参考【python】【PyQt5】デスクトップアプリ化して配布 -その3 ツールバー(QToolBar)の追加-
続きを見る