为什么PyQt的pyuic忽略默认边距?

3
在Qt Designer中,我可以看到verticalLayout有一个默认的边距(13px),但是pyuic5总是给我self.verticalLayout.setContentsMargins(0, 0, 0, 0)。在uiparser.py:443中,我找到了这个评论:

默认情况下,布局小部件不应该有边距。

它将边距设置为(0,0,0,0)。另一个注释也说:

除非父窗口是QMainWindow,否则普通QWidget是布局窗口小部件。请注意,相应的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>
1个回答

2

有一个PyQt邮件列表线程与此相关,似乎已经导致某些小部件的默认边距被强制设置为零。我不知道C++ uic工具的行为是否发生了改变,但在Qt-5.7中,它的行为肯定不同于pyuic。

可以通过选择“视图 -> 查看代码”在Qt Designer中检查这一点。当所有边距都设置为默认值时,C++ uic工具根本不会生成setContentsMargins行。如果一个边距被设置,它将把其他值设置为负一。当边距未设置或设置为负一时,布局将使用当前样式指定的任何值。

相比之下,pyuic始终明确地将未设置或设置为负一的任何边距重置为零,这实际上覆盖了当前样式。很难看出这是正确的行为 - 所以也许这是一个退步?


所以我不能仅仅从pyuic的输出中删除*.setContentsMargins(0, 0, 0, 0)。很不错的bug,为什么它不能将它们设置为-1呢? - krrr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接