こんにちは、タナカです。
今回は、PyQt5を使ってメニューバーを作成する方法を紹介します。
PyQt5は、グラフィックユーザーインターフェース(GUI)を作成することができるライブラリです。
- pyqt5でメニューバーを作成する方法がわかる
1. メニューバーとは
メニューバーとは下図のようにウィンドウ上部にあるものです。エクセルやパワポにもありますよね。
PyQt5でウィンドウを作成し、そのウィンドウにメニューバーを作成しています。
また、メニューバーには「開く」という機能を実装しており、ボタンを押すとファイルを選択する画面が表示されます。
2. ウィンドウを作成する
初めにウィンドウを作成します。ウィンドウを作成するコードはこちらになります。
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
class MainWindow(QMainWindow):
# コンストラクタ
def __init__(self):
super(MainWindow, self).__init__()
# ウィンドウのサイズと表示位置
# setGeometry(x, y, w, h) x: x位置, y: y位置, w: 幅, h: 高さ
self.setGeometry(300, 300, 500, 500)
# main関数(mainという名前に意味はない)
def main():
# アプリケーションオブジェクトの作成
app = QApplication(sys.argv)
# 自分で作ったクラスのインスタンスを生成
win = MainWindow()
# ウィジェットの表示
win.show()
# アプリケーションの実行
sys.exit(app.exec_())
# main関数の実行
main()
「MainWindow」という名前を付けてクラスを作ります。MainWindowはPyQt5.QtWidgetsの中のQMainWindowというクラスを継承しています。
QMainWindowクラスにはメニューバーを作成するメソッドがあります。クラスを継承したことにより、自分で作ったMainWindowクラスがその機能を使えるようになります。
3. メニューバーを作成する
実際にメニューバーを作成し、ウィンドウに表示させます。MainWindowクラスにコードを追加する形で書いていきます。
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
class MainWindow(QMainWindow):
# コンストラクタ
def __init__(self):
super(MainWindow, self).__init__()
# ウィンドウのサイズと表示位置
# setGeometry(x, y, w, h) x: x位置, y: y位置, w: 幅, h: 高さ
self.setGeometry(300, 300, 500, 500)
# 追加
# menubarを作成
self.createMenubar()
# 追加
def createMenubar(self):
# menubar
self.menubar = self.menuBar()
# menubarにメニューを追加
self.filemenu = self.menubar.addMenu('File')
「self.menuBar()」というメソッドを使ってメニューバーを作っています。「self」はQMainWindowを継承したMainWindow自体になります。
メニューバーに「File」という名前のメニューを追加しています。
4. メニューバーに機能を追加する
このままでは、「File」というメニューに何も機能が実装されていません。
最後に、この「File」というメニューに「開く」という機能を実装していきます。
# QActionとQFileDialogをインポート
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QFileDialog
import sys
class MainWindow(QMainWindow):
# コンストラクタ
def __init__(self):
super(MainWindow, self).__init__()
# ウィンドウのサイズと表示位置
# setGeometry(x, y, w, h) x: x位置, y: y位置, w: 幅, h: 高さ
self.setGeometry(300, 300, 500, 500)
# menubarを作成
self.createMenubar()
def createMenubar(self):
# menubar
self.menubar = self.menuBar()
# menubarにメニューを追加
self.filemenu = self.menubar.addMenu('File')
# 追加
# アクションの追加
self.openAction()
# 追加
def openAction(self):
# アクションの作成
self.open_act = QAction('開く')
self.open_act.setShortcut('Ctrl+O') # shortcut
self.open_act.triggered.connect(self.openFile) # open_actとメソッドを紐づける
# メニューにアクションを割り当てる
self.filemenu.addAction(self.open_act)
# 追加
def openFile(self):
self.filepath = QFileDialog.getOpenFileName(self, 'open file')[0]
QActionというクラスから「self.open_act」を作ります。QActionはPyQt5.QWidgetsから呼び出されたクラスになります。「self.open_act」にショートカットキーの追加および「self.openFile」という機能を紐づけています。
これによって、「開く」が押されるたびに「openFile」を呼び出すことができます。
「openFile」はQFileDailogの機能を使ってファイルを選択する関数になります。
「QFileDialog.getOpenFileName(self, ‘open file’)」は選択したファイルのパスと拡張子情報のタプルで返るため、最初の要素([1])を指定して、ファイルパスのみを取得できるようにしています。
まとめ
PyQt5を使ってメニューバーを表示させる方法を説明しました。
個人的には、GUIを勉強することはクラスを理解するうえで非常に良い方法だと思っています。
今後、他にもPyQt5に関する記事を書いていきます。