在Qt Designer中我可以看到verticalLayout
有一个默认边距(13px),但是pyuic5总是给我self.verticalLayout.setContentsMargins(0, 0, 0, 0)
。在uiparser.py:443
我发现了这条评论:
默认情况下,布局窗口小部件没有边距。
并将边距设置为(0,0,0,0)
。另一条评论也说:
普通的QWidget是一个布局小部件,除非它的父级是a QMainWindow的。请注意,相应的uic测试更多一点 因为它涉及pyuic不支持的功能,所以很复杂。
这是什么意思?我使用PyQt-5.7,这是我的ui文件:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>configDialog</class>
<widget class="QDialog" name="configDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>566</width>
<height>552</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="general">
<attribute name="title">
<string>General</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
答案 0 :(得分:2)
这有一个PyQt mailing list thread,这似乎导致某些小部件的默认边距被强制为零。我不知道从那时起C ++ uic工具的行为是否发生了变化,但在Qt-5.7中它的行为与pyuic的行为方式肯定不同。
可以通过选择View - &gt;在Qt Designer中进行检查。查看代码。当边距都设置为默认值时,C ++ uic工具根本不会生成setContentsMargins
行。如果设置了一个边距,则会将其他值设置为减1。未设置边距或设置为负1时,布局将使用当前样式指定的任何值。
相比之下,pyuic总是明确地将任何未设置的边距重置为零,或设置为减1 - 这有效地覆盖了当前样式。很难看出这是怎样的正确行为 - 所以也许这是一个回归?