python + qt designer の使い方メモ

スポンサーリンク

はじめに

python3とQt designerを使ってGUI
プログラミングをしてみました。

環境

macOS mojave
python3

qr designerインストール

Download Qt: Get Qt Online Installer

f:id:shangtian:20200102105709p:plain

f:id:shangtian:20200102105820p:plain

pyqt5インストール

$pip install pyqt5

使ってみる

まずはQtデザイナーを起動させる。 ボタンをクリックしたら表示されている
文字が変化するようなものを作って見よう。

起動させると次のようなUIが現れる

f:id:shangtian:20200102110429p:plain widgetを選択してCreateをクリック

f:id:shangtian:20200102110652p:plain

f:id:shangtian:20200102111142p:plainf:id:shangtian:20200102111154p:plain

関数を関連づける

ボタンをクリックした時に呼び出される関数を定義していく。
関数の中身はpythonで後ほど書いていく。

f:id:shangtian:20200103124640p:plain

ボタンをクリックした状態でカーソルを動かし適当な
場所で話すと以下のようなスクショの状態になる

f:id:shangtian:20200103141510p:plain

editボタンをクリックして関数を定義する f:id:shangtian:20200103141659p:plain

プラスボタンをクリックする f:id:shangtian:20200103141823p:plain

f:id:shangtian:20200103151633p:plain f:id:shangtian:20200103151734p:plain

.uiファイルを保存

f:id:shangtian:20200103134819p:plain

.uiから.pyへ変換

先ほど保存したファイルを変換する。 helloWorld.ui で保存したので

$pyuic5 helloWorld.ui > helloWorld_ui.py

f:id:shangtian:20200103135643p:plain

変換して出力されるファイルの中身がこれ

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'hello_world.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(640, 480)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(240, 340, 113, 32))
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(240, 170, 71, 31))
        self.label.setObjectName("label")

        self.retranslateUi(Form)
        self.pushButton.clicked.connect(Form.slot1)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "PushButton"))
        self.label.setText(_translate("Form", "aaaaa"))

コーディング

定義した関数slot1()の中身を書いていく。
今回はボタンを押したらラベルの内容が
hello worldになるように作っていく。

import sys
from PyQt5 import QtWidgets
#.uiファイルから変換後のファイルから読み込む
from helloWorld_ui import Ui_Form


class gui(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(gui, self).__init__(parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)
#ここで関数の定義
    def slot1(self):
        self.ui.label.setText('helloWorld')



if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = gui()
    window.show()
    sys.exit(app.exec_())

あとは実行すると

$python helloWorld_gui.py

ちゃんとボタンを押すと変化するのを確認出来た。 f:id:shangtian:20200103153458p:plain

参考文献

PyQt5とPython3で遊んでみた - Qiita

[入門]PyQtでHello Worldを表示する - Qiita

Qt Designerの使い方に慣れる - 理想のユーザ・インターフェイスを求めて