PyQtはPythonでQtアプリケーションの作成、アクセス、変更を行うためのPythonモジュールです。これを使用すると例えば独自にQtプログラムを作成したり、FreeCADなど実行中のQtアプリケーションのインターフェイスへのアクセスや変更が可能になります。
FreeCAD内部からPyQtモジュールを使用することでFreeCADのインターフェイスを完全に制御することができます。例えば以下のことを行うことができます。
PyQtには豊富なAPIドキュメントがあり、またネット上にはどの様にそれが動作するのか教えてくれるチュートリアルがたくさんあります。
もしFreeCADインターフェイスをいじりたいのであれば一番最初にやるべきことはFreeCADのメインウィンドウの参照を作成することです:
import sys from PyQt4 import QtGui app = QtGui.qApp mw = app.activeWindow()
すると例えばインターフェイスの全てのウィジットをブラウジングすることなどができるようになります:
for child in mw.children(): print 'widget name = ', child.objectName(), ', widget type = ', child
Qtインターフェイスのウィジットは普通、"コンテナ"ウィジット内に入れ子状態になっています。つまりメインウィンドウの子ウィンドウ自体も他の子ウィンドウを収納できるのです。ウィジットのタイプによって行えることは様々です。何ができるのかについてはAPIドキュメントをチェックしてください。
新しいウィジットの追加には例えばdockWidget(FreeCADのサイドパネルの一つに配置できます)が便利です:
myWidget = QtGui.QDockWidget() mw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myWidget)
さらにいろいろなものをウィジットに直接追加できます:
myWidget.setObjectName("my Nice New Widget") myWidget.resize(QtCore.QSize(300,100)) # ウィジットのサイズ設定 label = QtGui.QLabel("Hello World", myWidget) # ラベルを作成 label.setGeometry(QtCore.QRect(50,50,200,24)) # そのサイズを設定 label.setObjectName("myLabel") # 名前を設定することで名前を使って検索できるようにします
しかしよく好まれる方法は一度にウィジットの設定を全て行えるUIオブジェクトの作成です。この方法の大きな利点はQt Designerを使うことでこういったUIオブジェクトをグラフィカルな方法で作成できるということです。Qt Designerによって生成された標準的なオブジェクトは以下のようになります:
class myWidget_Ui(object): def setupUi(self, myWidget): myWidget.setObjectName("my Nice New Widget") myWidget.resize(QtCore.QSize(300,100).expandedTo(myWidget.minimumSizeHint())) # ウィジットのサイズを設定 self.label = QtGui.QLabel(myWidget) # ラベルを作成 self.label.setGeometry(QtCore.QRect(50,50,200,24)) # そのサイズを設定 self.label.setObjectName("label") # 名前を設定することで名前を使って検索できるようにします def retranslateUi(self, draftToolbar): # ウィジットの翻訳を管理する組み込みのQt関数 myWidget.setWindowTitle(QtGui.QApplication.translate("myWidget", "My Widget", None, QtGui.QApplication.UnicodeUTF8)) self.label.setText(QtGui.QApplication.translate("myWidget", "Welcome to my new widget!", None, QtGui.QApplication.UnicodeUTF8))
使用するには以下のようにして新しく作成したウィジットに適用するだけで構いません:
myNewFreeCADWidget = QtGui.QDockWidget() # 新しいウィジットを作成 myNewFreeCADWidget.ui = myWidget_Ui() # UIスクリプトをロード myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # UIを設定 FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # メインウィンドウにウィジットを追加