Я начал писать свое первое приложение PyQT (PyQT используется только для обработки графического интерфейса), и кажется, что хорошим набором инструментов является: QtDesigner для генерации .ui s и обработки ресурсов и некоторая IDE, которая может установить QtDesigner для редактирования этих , Я использую Eclipse, потому что он очень настраиваемый.
Вы можете скомпилировать ваши .qrc и .ui по требованию, выполнив что-то вроде этого при запуске приложения, или при настройке, или в любое другое время:
os.system("pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc")
uic.compileUiDir(appDir + '/ui', True)
и последующее использование сгенерированных классов следующим образом:
class MyMainWindow(QtGui.QMainWindow):
def __init__(self, owner):
QtGui.QMainWindow.__init__(self)
# 'Ui_MyMainWindow' is the class, that was generated by uic,
# naming convention is: 'Ui_' plus the name of root widget in designer
self.ui = Ui_MyMainWindow()
self.ui.setupUi(self)
или вы можете загрузить .ui напрямую, когда контейнерные единицы:
QtGui.QMainWindow.__init__(self)
self.ui = None
uic.loadUi('MyMainWindowUI.ui', self.ui)
#now you have the instance of Ui_MyMainWindow in self.ui too, as above
обратите внимание, что я добавил суффикс UI к имени файла .ui, это было сделано, чтобы избежать пересечения имен, поскольку имя файла .py, генерируемого uic, не является именем класса, начинающимся с 'Ui_', а просто корневым виджетом один.
И еще одно замечание: в конце сгенерированного файла uic помещает строку 'import% .qrc name% _rc' (по умолчанию - import images_rc), поэтому вы должны это учитывать при использовании pyrcc4.
Весь подход достаточно гибок, он берет на себя всю фиктивную работу по программированию пользовательского интерфейса; но вы все еще можете выполнить тонкую настройку в атрибуте MyMainWindow.ui, где лежит экземпляр Ui_MyMainWindow; и это позволяет избежать ненужного наследования. Лично я делаю методы _connectSlots и _initIntefrace в MyMainWindow, чтобы не мог работать какой-то дизайнер.
Тем не менее, я должен отметить, что написание кода интерфейса самостоятельно - хороший подход, потому что код, сгенерированный uic, является УГРОМНЫМ. Из-за этого я предпочитаю загружать .ui на место с помощью loadUi () :) И если у вас есть много пользовательских элементов управления PyQT, это так здорово - перенести их в QtDesigner ..