Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将QTDesigner与PyQT和Python 2.6一起使用_Python_Qt4_Pyqt4_Qt Designer - Fatal编程技术网

将QTDesigner与PyQT和Python 2.6一起使用

将QTDesigner与PyQT和Python 2.6一起使用,python,qt4,pyqt4,qt-designer,Python,Qt4,Pyqt4,Qt Designer,我是Python新手,我开始自学使用PyQT4.7和Python2.6进行GUI编程(希望如此) 我刚刚从PyQT网站下载了整个PyQT/QT4包(包括QTDesigner),但是它看起来像是QTDesigner,作为新手使用它(因为你可以看到每个小部件的所有属性/属性/默认值等)和可视化编辑属性非常棒,但PyQT似乎没有将QTDesigner设置为直接与PyQT和PyQTs python代码生成脚本集成: i、 例如:点击“查看代码”,尝试运行名为(uic)的Designer->C++脚本,而

我是Python新手,我开始自学使用PyQT4.7和Python2.6进行GUI编程(希望如此)

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

i、 例如:点击“查看代码”,尝试运行名为(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,请提供一种方法,这样我可以更轻松地学习它,谢谢

您可以在控制台中手动运行
pyuic
(或者更确切地说是
pyuic4
)。您可以使用Python使用设计器制作GUI,就像您将用C++做的那样。
顺便说一句:我已经为我的应用程序手工编写了所有GUI(10k代码)。我真的不喜欢GUI设计器,也不喜欢在需要调整某些内容时使用生成的代码。

我开始编写我的第一个PyQT应用程序(PyQT仅用于处理GUI),似乎好的工具链是:生成.ui的QtDesigner和处理资源以及一些可以设置QtDesigner编辑这些内容的IDE。我使用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_”开头的类名,而是根小部件的名称

另一个注意事项是:在生成的文件末尾,uic放置了“import%.qrc name%\u rc”(默认情况下是import images\u rc)字符串,因此在使用pyrcc4时必须注意这一点

整个方法足够灵活,它需要您完成所有虚拟ui编码工作;但是您仍然可以在MyMainWindow.ui属性中进行一些微调,其中包含ui_MyMainWindow的实例;它避免了不必要的继承。就我个人而言,我在MyMainWindow中创建了_connectSlots和_initIntefrace方法来完成一些设计师无法完成的工作


但我必须指出,自己编写接口代码是一种很好的方法,因为uic生成的代码很难看。我更喜欢用Load()来加载.UI,因为这有很多自定义的PyQT控件,所以它是这样的引导,把它们带到QtDesigner中。

< p> qtDesigner使用<代码> uIC.exe < /Cord>来生成即时的C++代码。code>uic.exe是一个命令行工具,它获取文件名作为输入参数。为了与python集成,您可以编写一个使用
pyuic.py
的python程序,将其输入与
uic.exe
的输入(顺序、开关等)匹配,将其转换为可执行文件(使用py2exe),并将可执行文件重命名为
uic.exe
。然后用Qt的bin目录中的uic.exe替换它(据我所知,PyQt中不存在uic.exe)。您只需注意
uic.exe
的输入参数和手写宏(它们应该匹配在一起)


我认为您的程序需要知道python的路径(以便使用pyuic)。如果您使用的是windows,则可以从注册表获取路径。

我所做的是制作自己的uic可执行文件,它是pyuic.py脚本的包装

你需要

  • 获取并安装

  • 在下面的uic.py代码中替换PYTHON_路径

  • 编辑站点packages\PyQt4中的qt.conf文件,并将Binaries=Path设置为包含uic exe的文件夹

  • 将uic.py和setup.py放在同一文件夹中

  • 在命令提示符中,导航到setup.py和uic.py所在的文件夹,然后运行以下命令“python setup.py py2exe”

  • //----uic.py

    //-----setup.py

    #setup.py    
    from distutils.core import setup
    import py2exe
    
    setup(windows=[{"script":"uic.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtCore"]}})
    
    #setup.py    
    from distutils.core import setup
    import py2exe
    
    setup(windows=[{"script":"uic.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtCore"]}})