2016-10-07 6 views
3

В Qt Designer я вижу, что verticalLayout имеет разницу по умолчанию (13 пикселей), но pyuic5 всегда дает мне self.verticalLayout.setContentsMargins(0, 0, 0, 0). В uiparser.py:443 Я нашел этот комментарий:Почему pyuic игнорирует значения по умолчанию?

Виджет макета должен по умолчанию не иметь полей.

и устанавливает его на (0,0,0,0). Другой комментарий также говорит:

Простой QWidget является расположение виджета, если это не родитель является QMainWindow. Обратите внимание, что соответствующий uic тест немного больше сложный, поскольку он включает в себя функции, не поддерживаемые pyuic.

Что это значит? Я использую PyQt-5.7, а вот мой пользовательский интерфейс файл:

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

ответ

2

Существует PyQt mailing list thread на это, что, кажется, привели к краям по умолчанию принуждают к нулю для некоторых виджетов. Я не знаю, изменилось ли поведение инструмента C++ uic с тех пор, но в Qt-5.7 оно, конечно, не ведет себя так же, как и puuic.

Это можно проверить в Qt Designer, выбрав View -> View code. Если для полей заданы значения по умолчанию, средство uic C++ не создает строку setContentsMargins. И если задано значение, оно будет устанавливать остальные значения минус один. Если маржа не установлена ​​или установлена ​​на минус один, макет будет использовать любое значение, указанное текущим стилем.

Напротив, pyuic всегда явно сбрасывает до нуля любое значение, которое не задано, или установлено на минус один, что фактически отменяет текущий стиль. Трудно понять, как это может быть правильное поведение - возможно, это регресс?

+0

Поэтому я не могу просто удалить '* .setContentsMargins (0, 0, 0, 0)' из вывода pyuic. Хорошая ошибка, почему она не может просто установить их на -1 – krrr

 Смежные вопросы

  • Нет связанных вопросов^_^