使用 pyside-uic 生成 Python 代码

发布于 2024-10-07 17:53:04 字数 88 浏览 7 评论 0原文

如何从 QtDesigner 文件生成 python 代码? 我找到了 pyside-uic 但找不到语法示例。 我用spyder运行win7和pythonxy。

How can I generate python code from a QtDesigner file ?
I found pyside-uic but I can't find an example for the syntax.
I run win7 and pythonxy with spyder.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

离旧人 2024-10-14 17:53:04

pyside-uic 或多或少与 pyuic4 相同,因此手册页指定:

Usage:
        pyside-uic [options] <ui-file>

Options:
    --version
        show program's version number and exit

    -h,--help
        show this help message and exit

    -oFILE,--output=FILE
        write generated code to FILE instead of stdout

    -x,--execute
        generate extra code to test and display the class

    -d,--debug
        show debug output

    -iN,--ident=N
        set indent width to N spaces, tab if N is 0 (default: 4)

我通常这样使用它:

pyside-uic -o output.py input.ui

pyside-uic is more or less identical to pyuic4, as such the man page specifies:

Usage:
        pyside-uic [options] <ui-file>

Options:
    --version
        show program's version number and exit

    -h,--help
        show this help message and exit

    -oFILE,--output=FILE
        write generated code to FILE instead of stdout

    -x,--execute
        generate extra code to test and display the class

    -d,--debug
        show debug output

    -iN,--ident=N
        set indent width to N spaces, tab if N is 0 (default: 4)

I usually use it like this:

pyside-uic -o output.py input.ui
记忆里有你的影子 2024-10-14 17:53:04

刚刚尝试了 Pyside 的 QUILoader,工作正常:

from PySide import QtGui  
from PySide import QtCore
from PySide import QtUiTools

class MyWidget(QtGui.QMainWindow):
    def __init__(self, *args):  
       apply(QtGui.QMainWindow.__init__, (self,) + args)

       loader = QtUiTools.QUiLoader()
       file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui")
       file.open(QtCore.QFile.ReadOnly)
       self.myWidget = loader.load(file, self)
       file.close()

       self.setCentralWidget(self.myWidget)

if __name__ == '__main__':  
   import sys  
   import os
   print("Running in " + os.getcwd() + " .\n")

   app = QtGui.QApplication(sys.argv)  

   win  = MyWidget()  
   win.show()

   app.connect(app, QtCore.SIGNAL("lastWindowClosed()"),
               app, QtCore.SLOT("quit()"))
   app.exec_()

我使用 Eclipse 和 QTDesigner 创建 .ui 文件(右键单击模块,“新建 -> 其他..”,选择“Qt Designer -> Qt Designer Form”)。不需要显式的 uic 调用。

Just tried Pyside's QUILoader, works fine:

from PySide import QtGui  
from PySide import QtCore
from PySide import QtUiTools

class MyWidget(QtGui.QMainWindow):
    def __init__(self, *args):  
       apply(QtGui.QMainWindow.__init__, (self,) + args)

       loader = QtUiTools.QUiLoader()
       file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui")
       file.open(QtCore.QFile.ReadOnly)
       self.myWidget = loader.load(file, self)
       file.close()

       self.setCentralWidget(self.myWidget)

if __name__ == '__main__':  
   import sys  
   import os
   print("Running in " + os.getcwd() + " .\n")

   app = QtGui.QApplication(sys.argv)  

   win  = MyWidget()  
   win.show()

   app.connect(app, QtCore.SIGNAL("lastWindowClosed()"),
               app, QtCore.SLOT("quit()"))
   app.exec_()

I used Eclipse and QTDesigner to create the .ui file (right-click on module, "New -> Other..", choose "Qt Designer -> Qt Designer Form"). No explicit uic call is needed.

风为裳 2024-10-14 17:53:04
pyside-uic.exe MyWindow.ui -o MyWindow.py 

这就是我一直在做的事情,而且效果很好(据我所知)

pyside-uic.exe MyWindow.ui -o MyWindow.py 

is what I've been doing and it's working fine (as far as I know)

无声无音无过去 2024-10-14 17:53:04
import pysideuic
import xml.etree.ElementTree as xml
from cStringIO import StringIO

def loadUiType(uiFile):
    """
    Pyside "loadUiType" command like PyQt4 has one, so we have to convert the 
    ui file to py code in-memory first and then execute it in a special frame
    to retrieve the form_class.
    """
    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    with open(uiFile, 'r') as f:
        o = StringIO()
        frame = {}

        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame

        # Fetch the base_class and form class based on their type
        # in the xml from designer
        form_class = frame['Ui_%s'%form_class]
        base_class = eval('QtGui.%s'%widget_class)

    return form_class, base_class

您可以使用这种方式加载UI,还可以获取form_class以及基类作为返回类型...但是如果您不想转换,否则是的,以下是正确的方法。

pyside-uic.exe MyWindow.ui -o MyWindow.py
import pysideuic
import xml.etree.ElementTree as xml
from cStringIO import StringIO

def loadUiType(uiFile):
    """
    Pyside "loadUiType" command like PyQt4 has one, so we have to convert the 
    ui file to py code in-memory first and then execute it in a special frame
    to retrieve the form_class.
    """
    parsed = xml.parse(uiFile)
    widget_class = parsed.find('widget').get('class')
    form_class = parsed.find('class').text

    with open(uiFile, 'r') as f:
        o = StringIO()
        frame = {}

        pysideuic.compileUi(f, o, indent=0)
        pyc = compile(o.getvalue(), '<string>', 'exec')
        exec pyc in frame

        # Fetch the base_class and form class based on their type
        # in the xml from designer
        form_class = frame['Ui_%s'%form_class]
        base_class = eval('QtGui.%s'%widget_class)

    return form_class, base_class

You can use this way to load the UI and can also get form_class as well as the base class as return type... but if you do not want to convert, otherwise Yes the following is the correct way.

pyside-uic.exe MyWindow.ui -o MyWindow.py
柠檬色的秋千 2024-10-14 17:53:04

QUiLoader 类将完成这项工作,而无需创建中间文件。

http://www.pyside.org/docs/pyside/PySide/QtUiTools /QUiLoader.html

QUiLoader class will do the job without making an intermediate file.

http://www.pyside.org/docs/pyside/PySide/QtUiTools/QUiLoader.html

停顿的约定 2024-10-14 17:53:04

阅读文档。在这种特殊情况下,http://www.riverbankcomputing.co。 uk/static/Docs/PyQt4/pyqt4ref.html#pyuic4

The pyuic4 utility is a command line interface to the uic module. The command has the following syntax:

pyuic4 [options] .ui-file

The full set of command line options is:
-h, --help  A help message is written to stdout.
--version   The version number is written to stdout.
-i N, --indent=N
    The Python code is generated using an indentation of N spaces. If N is 0 then a tab is used. The default is 4.
-o FILE, --output=FILE
    The Python code generated is written to the file FILE.
-p, --preview   The GUI is created dynamically and displayed. No Python code is generated.
-w, --pyqt3-wrapper
    The generated Python code includes a small wrapper that allows the GUI to be used in the same way as it is used in PyQt v3.
-x, --execute   The generated Python code includes a small amount of additional code that creates and displays the GUI when it is executes as a standalone application.
--from-imports  Resource modules are imported using from . import rather than a simple import.

Read the documentation. In this particular case, http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#pyuic4:

The pyuic4 utility is a command line interface to the uic module. The command has the following syntax:

pyuic4 [options] .ui-file

The full set of command line options is:
-h, --help  A help message is written to stdout.
--version   The version number is written to stdout.
-i N, --indent=N
    The Python code is generated using an indentation of N spaces. If N is 0 then a tab is used. The default is 4.
-o FILE, --output=FILE
    The Python code generated is written to the file FILE.
-p, --preview   The GUI is created dynamically and displayed. No Python code is generated.
-w, --pyqt3-wrapper
    The generated Python code includes a small wrapper that allows the GUI to be used in the same way as it is used in PyQt v3.
-x, --execute   The generated Python code includes a small amount of additional code that creates and displays the GUI when it is executes as a standalone application.
--from-imports  Resource modules are imported using from . import rather than a simple import.
帝王念 2024-10-14 17:53:04

PySide 团队目前不鼓励使用 QtUiTools(如另一个答案中所建议的)。

请在此处阅读完整故事:https://groups.google.com/论坛/?fromgroups=#!topic/pyside/_s1HPe6XTZs

Using QtUiTools (as suggested in another answer) is currently discouraged by the PySide team.

Read the full story here: https://groups.google.com/forum/?fromgroups=#!topic/pyside/_s1HPe6XTZs

鹤舞 2024-10-14 17:53:04

查看 C:\Python27\Lib\site-packages\PySide\scripts\uic.py (或者安装了 python 的任何地方)。如果您查看该脚本,您可以看到手册页中标记和描述的选项(我不知道如何在 Windows 上正确查看。建议感谢。)这里 http://manpages.ubuntu.com/manpages/precise/man1/pyside-uic.1.html

我在尝试查看 C:\Python27\Lib\site-packages\pysideuic\pyside-uic.1 时感到困惑,因为我认为这一定是正在调用的文件。由于所有额外的字符,即使尝试将其视为手册页对我来说也是不可能的。你不能通过猜测哪些字符是多余的、哪些不是多余的来学习语法!

在 Windows 上,您当然可以使用批处理文件自动执行此操作,方法是保存带有上述行(下面供参考)和 .bat 扩展名(如 uic_generator.bat)的文本文件。

pyside-uic MyWindow.ui -o MyWindow.py

Look at C:\Python27\Lib\site-packages\PySide\scripts\uic.py (or wherever you have python installed). If you look at that script you can see the options labelled and described as in the man page (Which I don't know how to view properly on windows. Tips appreciated.) here http://manpages.ubuntu.com/manpages/precise/man1/pyside-uic.1.html

I got confused for a while trying to look at C:\Python27\Lib\site-packages\pysideuic\pyside-uic.1 as I thought that must be the file that is being called. Even trying to view that as a manual page is impossible for me because of all the extra characters. You can't learn syntax by trying to guess at which characters are extra and which ones aren't!

On windows you can automate this with a batch file of course by saving a text file with the above mentioned line(below for reference) with .bat extension like uic_generator.bat.

pyside-uic MyWindow.ui -o MyWindow.py

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文