Python | GUIアプリ作成方法(Mac & Windows)

GUI App

Python GUIアプリを作成する方法を説明する。PyQt6を使用する。

完成イメージ

なまえとしょくぎょうを入れてボタンをおすと結果が表示されるアプリを作る。

  1. なまえをいれる。
  2. しょくぎょうをえらぶ。
  3. けっていボタンをおす。
  4. ボタンの下に「あなたは [しょくぎょう] [なまえ] です」と表示される。

MacでもWindowsでも同じコードを書けば同じGUIアプリができる。

環境

PyQt6を使用する。インストールしていない場合はpipでインストールする。

pip install pyqt6

開発環境の構築方法は下記記事を参照。

GUIアプリ作成方法

1. 空のGUIウィンドウ

  1. PyQt6から必要なものをimportする。
  2. self.setGeometry(横方向位置, 縦方向位置, 横幅, 縦幅)でGUIウィンドウの位置とサイズを設定する。
#!/usr/bin/env python3

import sys
from PyQt6.QtWidgets import QApplication, QWidget  # 1


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setGeometry(0, 0, 250, 300)           # 2


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    window.show()
    sys.exit(app.exec())

classの初期化については下記記事を参照。

if __name__ == ‘__main__’: については下記記事を参照。

環境構築とプログラムの実行方法については下記記事を参照。

2. 文字列

  1. PyQt6からQLabelをimportする。
  2. build_ui()という関数を作成しUIのパーツはその関数内に記述する。
  3. QLabelで文字列を表示する。
#!/usr/bin/env python3

import sys
from PyQt6.QtWidgets import QApplication, QWidget, \
                            QLabel                              #1


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setGeometry(0, 0, 250, 300)
        self.build_ui()                                         #2

    def build_ui(self):                                         #2
        self.qlb_name = QLabel('なまえを  いれてください', self)    #3
        self.qlb_name.setGeometry(10, 10, 200, 20)              #3


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    window.show()
    sys.exit(app.exec())

3. テキスト入力欄

  1. QLineEditをimportする。
  2. QLineEditを配置する。
#!/usr/bin/env python3

import sys
from PyQt6.QtWidgets import QApplication, QWidget, \
                            QLabel, QLineEdit               #1


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setGeometry(0, 0, 250, 300)
        self.build_ui()

    def build_ui(self):
        self.qlb_name = QLabel('なまえを  いれてください', self)
        self.qlb_name.setGeometry(10, 10, 200, 20)

        self.qle_name = QLineEdit('', self)                 #2
        self.qle_name.setGeometry(10, 40, 200, 20)          #2


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    window.show()
    sys.exit(app.exec())

4. プルダウン

  1. QComboBoxをimportする。
  2. QComboBoxを配置する。
  3. addItemで要素を追加していく。
#!/usr/bin/env python3

import sys
from PyQt6.QtWidgets import QApplication, QWidget, \
                            QLabel, QLineEdit, QComboBox          #1


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setGeometry(0, 0, 250, 300)
        self.build_ui()

    def build_ui(self):
        self.qlb_name = QLabel('なまえを  いれてください', self)
        self.qlb_name.setGeometry(10, 10, 200, 20)

        self.qle_name = QLineEdit('', self)
        self.qle_name.setGeometry(10, 40, 200, 20)

        self.qlb_job = QLabel('しょくぎょうを  えらんでください', self)
        self.qlb_job.setGeometry(10, 80, 200, 20)

        self.qcb_job = QComboBox(self)                             #2
        self.qcb_job.addItem('')                                   #3
        self.qcb_job.addItem('ゆうしゃ')                            #3
        self.qcb_job.addItem('ぶとうか')                            #3
        self.qcb_job.addItem('けんじゃ')                            #3
        self.qcb_job.setGeometry(10, 110, 200, 20)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    window.show()
    sys.exit(app.exec())

5. ボタン

  1. QPushButtonをimportする。
  2. QPushButtonを配置する。
#!/usr/bin/env python3

import sys
from PyQt6.QtWidgets import QApplication, QWidget, \
                            QLabel, QLineEdit, QComboBox, QPushButton  #1


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setGeometry(0, 0, 250, 300)
        self.build_ui()

    def build_ui(self):
        self.qlb_name = QLabel('なまえを  いれてください', self)
        self.qlb_name.setGeometry(10, 10, 200, 20)

        self.qle_name = QLineEdit('', self)
        self.qle_name.setGeometry(10, 40, 200, 20)

        self.qlb_job = QLabel('しょくぎょうを  えらんでください', self)
        self.qlb_job.setGeometry(10, 80, 200, 20)

        self.qcb_job = QComboBox(self)
        self.qcb_job.addItem('')
        self.qcb_job.addItem('ゆうしゃ')
        self.qcb_job.addItem('ぶとうか')
        self.qcb_job.addItem('けんじゃ')
        self.qcb_job.setGeometry(10, 110, 200, 20)

        self.qbp_kettei = QPushButton('けってい', self)               #2
        self.qbp_kettei.setGeometry(10, 160, 200, 40)                #2


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    window.show()
    sys.exit(app.exec())

6. ボタンクリック時の動作

  1. ボタンの下に空の文字列self.qlb_resultを用意する。
  2. ボタンクリック時にself.set_resultを実行するように設定する。
  3. self.set_result()で結果を表示する。
#!/usr/bin/env python3

import sys
from PyQt6.QtWidgets import QApplication, QWidget, \
                            QLabel, QLineEdit, QComboBox, QPushButton


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setGeometry(0, 0, 250, 300)
        self.build_ui()
        self.connect_signal_slot()

    def build_ui(self):
        self.qlb_name = QLabel('なまえを  いれてください', self)
        self.qlb_name.setGeometry(10, 10, 200, 20)

        self.qle_name = QLineEdit('', self)
        self.qle_name.setGeometry(10, 40, 200, 20)

        self.qlb_job = QLabel('しょくぎょうを  えらんでください', self)
        self.qlb_job.setGeometry(10, 80, 200, 20)

        self.qcb_job = QComboBox(self)
        self.qcb_job.addItem('')
        self.qcb_job.addItem('ゆうしゃ')
        self.qcb_job.addItem('ぶとうか')
        self.qcb_job.addItem('けんじゃ')
        self.qcb_job.setGeometry(10, 110, 200, 20)

        self.qbp_kettei = QPushButton('けってい', self)
        self.qbp_kettei.setGeometry(10, 160, 200, 40)

        self.qlb_result = QLabel('', self)                      #1
        self.qlb_result.setGeometry(10, 230, 200, 20)           #1

    def connect_signal_slot(self):
        self.qbp_kettei.clicked.connect(self.set_result)        #2

    def set_result(self):                                       #3
        self.result = 'あなたは '\
                      + self.qcb_job.currentText() + ' '\
                      + self.qle_name.text() + ' です'
        self.qlb_result.setText(self.result)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    window.show()
    sys.exit(app.exec())

以上でこのGUIアプリは完成。

exe化したい場合

exe化したい場合は下記記事を参照。

まとめ

Python GUIアプリを作成する方法を説明した。

コメント