#layout #pyqt #pyqt4 #qt-designer #pyuic
#макет #pyqt #pyqt4 #qt-designer #pyuic
Вопрос:
pyuic4, похоже, генерирует неправильный макет на основе файла .ui из Qt Designer. Файл пользовательского интерфейса находится здесь:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>348</width>
<height>267</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item alignment="Qt::AlignTop">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>amp;<htmlamp;>amp;<head/amp;>amp;<bodyamp;>amp;<p align=amp;quot;centeramp;quot;amp;>amp;<span style=amp;quot; font-size:14pt;amp;quot;amp;>Some Textamp;</spanamp;>amp;</pamp;>amp;</bodyamp;>amp;</htmlamp;></string>
</property>
</widget>
</item>
<item alignment="Qt::AlignTop">
<widget class="Line" name="line_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item alignment="Qt::AlignBottom">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item alignment="Qt::AlignBottom">
<widget class="QPushButton" name="btn_customize">
<property name="text">
<string>Customize</string>
</property>
</widget>
</item>
<item alignment="Qt::AlignBottom">
<widget class="QPushButton" name="btn_done">
<property name="text">
<string>OK</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
В этом макете я пытаюсь выровнять пару кнопок с нижней частью диалогового окна, а некоторый текст — с верхней. При запуске pyuic4 test.ui --preview
все объекты выровнены по центру по горизонтали, а не по верху и низу (и отображение этого диалогового окна из реальной программы python показывает те же результаты). Для сравнения, pyuic5 test.ui --preview
кажется, что это больше соответствует тому, что я хотел получить.
Если это поможет, моя версия pyuic4 — 4.11.4, и я использую Ubuntu 16.04.
Есть идеи? Я делаю что-то не так? Или, возможно, существует более новый pyuic4?
Ответ №1:
В pyuic была ошибка, которая повлияла на обработку выравнивания в макетах. Это было исправлено в PyQt-5.5, который был выпущен 17 июля 2015 года. Однако PyQt-4.11.4 (которая является текущей версией) была выпущена 11 июня 2015 года, поэтому исправление еще не включено. Тем не менее, текущий моментальный снимок разработки для PyQt-4.12 включает исправление.
Но я не думаю, что это действительно решит вашу проблему. Что вам нужно сделать вместо этого, так это использовать расширяющиеся прокладки. Вот как это сделать, используя ваш пример файла пользовательского интерфейса:
- Щелкните на горизонтальной кнопке layout, а затем нажмите Break Layout (это удалит все текущие макеты).
- Ctrl щелкните две кнопки, а затем щелкните Макет по горизонтали.
- Щелкните диалоговое окно, а затем щелкните Макет по вертикали.
- Перетащите вертикальный разделитель между двумя линейными виджетами
Предоставляя вам это:
Если вы хотите разместить какие-то другие виджеты в центральной области, вам может потребоваться добавить расширяющиеся вертикальные разделители над и / или под ними, чтобы получить те же результаты. Опять же, если вы поместите туда что-то вроде текстового поля или виджета списка, оно должно автоматически расшириться, чтобы заполнить доступное пространство — в этом случае не было бы необходимости в каких-либо разделителях (или выравниваниях макета).
Комментарии:
1. один для информирования об ошибке и объяснения за пределами исходного примера