はじめに
python3とQt designerを使ってGUI
プログラミングをしてみました。
環境
macOS mojave
python3
qr designerインストール
Download Qt: Get Qt Online Installer
pyqt5インストール
$pip install pyqt5
使ってみる
まずはQtデザイナーを起動させる。
ボタンをクリックしたら表示されている
文字が変化するようなものを作って見よう。
起動させると次のようなUIが現れる
widgetを選択してCreateをクリック
関数を関連づける
ボタンをクリックした時に呼び出される関数を定義していく。
関数の中身はpythonで後ほど書いていく。
ボタンをクリックした状態でカーソルを動かし適当な
場所で話すと以下のようなスクショの状態になる
editボタンをクリックして関数を定義する
プラスボタンをクリックする
.uiファイルを保存
.uiから.pyへ変換
先ほど保存したファイルを変換する。 helloWorld.ui で保存したので
$pyuic5 helloWorld.ui > helloWorld_ui.py
変換して出力されるファイルの中身がこれ
# -*- 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
ちゃんとボタンを押すと変化するのを確認出来た。