Qt Designer - 只生成一个带有多个小部件的 .ui 文件

Posted

技术标签:

【中文标题】Qt Designer - 只生成一个带有多个小部件的 .ui 文件【英文标题】:Qt Designer - Generate only one .ui file with several widgets 【发布时间】: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 文件作为输入?

【问题讨论】:

【参考方案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__稍微混一下。

以上是关于Qt Designer - 只生成一个带有多个小部件的 .ui 文件的主要内容,如果未能解决你的问题,请参考以下文章

qt designer 怎么把界面和代码联系起来

如何在 QT Designer 中指定默认文本光标小部件

QT通过 QT designer 可以生成 ui文件

Qt Designer 代码生成问题

带有 Qt Designer 的 pyqtgraph:如何将 PlotItems 添加到 GraphicsLayoutWidget

QPushButton.setMenu (self, QMenu menu) 使用从 Qt Designer 生成的代码