使用QTDesigner与PyQT和Python 2.6

PyN*_*e27 20 python qt4 pyqt4 qt-designer

我是Python的新手,并开始使用PyQT4.7和Python 2.6自学GUI编程(希望如此)

我刚刚从PyQT网站下载了整个PyQT/QT4软件包(包括QTDesigner),但它似乎是QTDesigner,它看起来很棒,可以作为新手使用(因为你可以看到所有的属性/属性/默认值等)每个小部件和视觉编辑属性很棒,但PyQT似乎没有设置QTDesigner直接与PyQT和PyQTs python代码生成脚本集成:

即:点击"查看代码",尝试运行名为(uic)的Designer-> C++脚本,而不是pyuic.py脚本等.

有没有办法让QTDesigner与PyQT紧密集成,以便像在C++中一样动态生成代码?

如果没有,这是否意味着我必须在我的Python IDE中编写整个QT GUI并查找每个小部件的所有文档和样板代码?(与仅使用QTDesigner + Python集成相比,效率非常低,效率低).

什么是使用Designer与PyQT的习惯工具链//生产流程?(如果不能直接集成 - python + pyQT用户是否只是一起跳过使用QTDesigner并在python中手动编写所有QT GUI代码?)

有关PyQT新手的任何其他提示/建议将不胜感激.谢谢!

ps我知道很多你可能会告诉我只是把它吸干并手工编写所有的QT UI,但是如果我按照上面的要求学习使用Designer,请提供一种方法来做到这一点我可以学习它更轻松,谢谢!

Max*_*vko 20

我开始编写我的第一个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)
Run Code Online (Sandbox Code Playgroud)

然后以这种方式使用生成的类:

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)
Run Code Online (Sandbox Code Playgroud)

或者你可以在容器中直接加载.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
Run Code Online (Sandbox Code Playgroud)

注意,我已经为.ui文件的名称添加了UI后缀,这是为了避免名称交集,导致.ic文件的名称,由uic生成,不是以'Ui_'开头的类名,而只是根小部件的名称.

另外一个注意事项:在生成文件的末尾,uic将'import%.qrc name%_rc'(默认为import images_rc)字符串放置,因此在使用pyrcc4时必须注意这一点.

整个方法足够灵活,它需要你的所有虚拟ui编码工作; 但你仍然可以在MyMainWindow.ui属性中进行一些微调,其中Ui_MyMainWindow的实例位于其中; 它避免了不必要的继承.就个人而言,我在MyMainWindow中使_connectSlots和_initIntefrace方法做一些工作设计师不能.

我还是要注意,自己编写接口代码是很好的方法,因为uic生成的代码是UGLY.我更喜欢通过loadUi()来加载.ui因为这个:)如果你有很多自定义PyQT控件,那么将它们带入QtDesigner是如此的自负.