Pythonを使ってQGISのプラグインを作るにあたり、QTダイアログについて調べる
QTデザイナを起動して「新規作成」→「Dialog without Buttons」を選択。
ボタンを配置し、ui_sampleDlg.uiに保存。
pyuic4を使用してuiファイルをPythonファイルに変換
pyuic4 ui_sampleDlg.ui -o ui_sampleDlg.py
※pyuic4.batを使うためにC:\OSGeo4W\binにPATHを通す。
環境変数PYTHONHOMEが設定されていなければpyuic4.batに以下の行を追加
SET PYTHONHOME=C:\OSgeo4w\apps\Python27
変換後のui_sampleDlg.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'ui_sampleDlg.ui' # # Created: Sat Apr 23 07:01:53 2016 # by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName(_fromUtf8("Dialog")) Dialog.resize(400, 300) self.pushButton = QtGui.QPushButton(Dialog) self.pushButton.setGeometry(QtCore.QRect(300, 20, 75, 23)) self.pushButton.setObjectName(_fromUtf8("pushButton")) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): Dialog.setWindowTitle(_translate("Dialog", "Dialog", None)) self.pushButton.setText(_translate("Dialog", "PushButton", None))
作成したユーザーインターフェイスを呼び出すクラスをQDialogから派生して作成
クラス名はSampleDlg、ファイル名はSampleDlg.pyとする。
※ifaceは
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'DlgTest.ui' # # Created: Wed Apr 20 16:59:11 2016 # by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! from PyQt4.QtCore import * from PyQt4.QtGui import * from qgis.core import * from ui_sampleDlg import Ui_Dialog class SampleDlg(QDialog): def __init__(self, iface): QDialog.__init__(self) self.iface = iface self.ui = Ui_Dialog() self.ui.setupUi(self)
プラグインからSampleDlgクラスの表示
from SampleDlg import SampleDlg dlg = SampleDlg(self.iface) dlg.show() dlg.exec_()
以上で正しく表示される
次はボタンが押されたらダイアログを閉じるように設定
SampleDlgクラスでボタンのシグナル引っ掛けてダイアログのcloseを呼ぶ
class SampleDlg(QDialog): def __init__(self, iface): ・・・ QObject.connect(self.ui.pushButton, SIGNAL("clicked()"), self.pushButton) @pyqtSlot() def pushButton(self): self.close()
以上で終了