我开始写我的第一个PyQT应用程序(PyQT仅用于处理GUI),看来,好的工具链是:QtDesigner生成.ui并处理资源和一些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后缀,这样做是为了避免名称交集,因为uic生成的.py文件的名称不是以’Ui_’开头的类名,而只是root小部件的。
还有一个注意事项:uic在生成的文件末尾放置“ import%.qrc name%_rc”(默认为import images_rc)字符串,因此在使用pyrcc4时必须注意这一点。
整个方法足够灵活,需要您进行所有虚拟ui编码工作;但是您仍然可以在MyMainWindow.ui属性(Ui_MyMainWindow实例所在的位置)中进行一些微调;并且避免了不必要的继承。就我个人而言,我在MyMainWindow中制作_connectSlots和_initIntefrace方法来做一些设计器无法完成的工作。
我仍然要注意,自己编写接口代码是一种好方法,因为uic生成的代码很丑陋。我更喜欢通过loadUi()将.ui加载到位,因为:)而且,如果您有很多自定义PyQT控件,那么将它们带入QtDesigner实在是太麻烦了。