PySide/ru

PyQt это модуль python, который позволяет приложениям на python создавать, получать доступ и изменять Qt приложения. Вы можете использовать его для создания собственных Qt программ на python, или получать доступ и изменять интерфейс запущенного 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.getObjectName, ', 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(QtCore.QRect(0,0,300,100))) # sets size of the widget label = QtGui.QLabel(myWidget) # creates a label label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size label.setObjectName("myLabel") # sets its name, so it can be found by name

Но предпочтителным методом будет создание UI объекта, который сразу будет включать все настройки вашего виджета. Главное преимущество в том что этот UI объект можно создать графически с помощью программы Qt Designer. Типичный объект созданый в Qt Designer, например этот:

class myWidget_Ui(object): def setupUi(self, myWidget): myWidget.setObjectName("my Nice New Widget") myWidget.resize(QtCore.QSize(QtCore.QRect(0,0,300,100).size).expandedTo(myWidget.minimumSizeHint)) # sets size of the widget self.label = QtGui.QLabel(myWidget) # creates a label self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size self.label.setObjectName("label") # sets its name, so it can be found by name def retranslateUi(self, draftToolbar): # built-in QT function that manages translations of widgets 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 # create a new dckwidget myNewFreeCADWidget.ui = myWidget_Ui # load the Ui script myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window