我是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,请提供一种方法来学习更容易,谢谢!
我开始写我的第一个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实在是太麻烦了。