【问题标题】:Qt Designer - Generate only one .ui file with several widgetsQt Designer - 只生成一个带有多个小部件的 .ui 文件
【发布时间】:2013-04-29 09:31:51
【问题描述】:

几周前我开始使用 Qt Designer 为我的 PySide 应用程序生成一些自定义小部件。我希望我能做一些事情,但我无法找到方法:我想将所有小部件保存在一个大的 .ui 中,然后将它们编译到一个大的 .py 文件中,以便所有 GUI 详细信息在同一个文件中,比如gui.py。这样我就可以写出这样的东西:

import gui.MainWindow
import gui.FluffyRabbitWidget

class MainWindow(gui.MainWindow): pass
class FluffyRabbitWidget(gui.FluffyRabbitWidget): pass

然后我就不必费心用 Python 代码处理一大堆不同的文件了,因为这些文件是生成后我永远不会阅读的。那么,我怎样才能拥有一个大的.ui 文件呢?如果不可行,有没有办法告诉pyside-uic 只生成一个.py 文件和几个.ui 文件作为输入?

【问题讨论】:

    标签: python qt pyside qt-designer


    【解决方案1】:

    阅读pyside-uic的源码,可以看到它不接受多个.ui参数:

    opts, args = parser.parse_args()
    
    if len(args) != 1:
    
        sys.stderr.write("Error: one input ui-file must be specified\n")
    
        sys.exit(1)
    
    sys.exit(invoke(Driver(opts, args[0])))
    

    所以答案是:不。 pyside-uic 不能这样做。

    一个肮脏的解决方案可能cat生成的文件放在一起,但是每次修改小部件时都必须这样做:

    $ cat generated_*.py > gui.py
    

    (其中generated_*.py 应该是与为您的小部件生成的文件匹配的正则表达式。

    【讨论】:

    • 好的,所以 pyside-uic 没有帮助。我已经想到了其他肮脏的解决方案;那个看起来并不比其他的丑。你知道 Qt Designer 是否有一些可行的方法吗?读取.ui XML,我不知道几个小部件是否只能放在一个.ui 文件中。
    • 不幸的是我不喜欢 XML 模式,所以我不明白单个文件上是否可以有多个定义,但你可以找到文件格式规范 here
    • @rlacko 这似乎是一个明智的解决方案,尽管有一些缺点。例如,您必须使用from gui.module_name import ClassName 而不是from gui import ClassName,但这可以通过在包__init__.py 中导入来解决。
    • 既然没有办法解决,我想我还是把所有的文件都放在一个子包里,然后和__all__稍微混一下。
    猜你喜欢
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多