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 的 pyqtgraph:如何将 PlotItems 添加到 GraphicsLayoutWidget
QPushButton.setMenu (self, QMenu menu) 使用从 Qt Designer 生成的代码