waigani's diary

QGISを中心にFOSS4Gをいじくる

QGISでプラグインを作成する その3

Qtの勉強

この辺が役に立ちましたRkBlog - Introduction to PyQt4

dialogを表示する

前回からの続きになります
QtDesignerで表示するdialogを先に作成しておきます

QtDesignerで"Dialog without Buttons"を選択してformを作成

"Input Widgets"から"Text Edit"を貼り付けます
名前は"textEdit"としておきました

作成したdialogをui_dialog.uiという名前で保存しておき、pythonコンパイルします

 pyuic4 -o ui_dialog.py ui_dialog.ui

出来上がったファイルの中身はこんな感じです

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

# Form implementation generated from reading ui file 'ui_dialog.ui'
#
# Created: Sat May 21 22:48:18 2011
#      by: PyQt4 UI code generator 4.8.3
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(300, 71)
        self.textEdit = QtGui.QTextEdit(Dialog)
        self.textEdit.setGeometry(QtCore.QRect(10, 10, 281, 51))
        self.textEdit.setObjectName(_fromUtf8("textEdit"))

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))

クラスを1つ挟みます

dialog.pyというファイルを作成します
中身はこんな感じです
QtDesignerで作成したdialogを呼び出しています

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

from PyQt4 import QtCore, QtGui 
from ui_dialog import Ui_Dialog 

class Dialog(QtGui.QDialog): 
  def __init__(self): 
    QtGui.QDialog.__init__(self) 
    
    self.ui = Ui_Dialog() 
    self.ui.setupUi(self)
     
    self.ui.textEdit.setText('test')

plugin.pyの変更

run()にdialog.pyのDialogインスタンス作成を加えます
plugin.py全体としては下記になります

# -*- coding: utf-8 -*-
#Import the PyOt and QGIS libraries
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
#Initialize Qt resources from file resources.py
import resources_rc

class pluginTest:

  def __init__(self, iface):
    #Save reference to the QGIS interface
    self.iface = iface

  def initGui(self):
    self.action = QAction(QIcon(":/icon/qgis-icon.png"), "test", self.iface.mainWindow())
    QObject.connect(self.action, SIGNAL("triggered()"), self.run)
  
    self.iface.addToolBarIcon(self.action)
    self.iface.addPluginToMenu("test", self.action)
  
  def unload(self):
    self.iface.removePluginMenu("test",self.action)
    self.iface.removeToolBarIcon(self.action)
    
  def run(self):
    from dialog import Dialog 

    dlg = Dialog()
    dlg.show()
    dlg.exec_() 

実行すると

プラグインを実行すると、dialogが表示されます
それだけですが

まだまだQtの使い方を勉強する必要がありそうです・・・