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()
以上で終了