前回の記事「デスクトップアプリ化して配布 -その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)の追加-
続きを見る