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

时间:2016-10-07 05:45:23

标签: python qt layout pyqt qt-designer

在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>

1 个答案:

答案 0 :(得分:2)

这有一个PyQt mailing list thread,这似乎导致某些小部件的默认边距被强制为零。我不知道从那时起C ++ uic工具的行为是否发生了变化,但在Qt-5.7中它的行为与pyuic的行为方式肯定不同。

可以通过选择View - &gt;在Qt Designer中进行检查。查看代码。当边距都设置为默认值时,C ++ uic工具根本不会生成setContentsMargins行。如果设置了一个边距,则会将其他值设置为减1。未设置边距或设置为负1时,布局将使用当前样式指定的任何值。

相比之下,pyuic总是明确地将任何未设置的边距重置为零,或设置为减1 - 这有效地覆盖了当前样式。很难看出这是怎样的正确行为 - 所以也许这是一个回归?