@NakedFace

Как правильно генерировать формы на PyQt?

Здравствуйте!
Пользуюсь QtDesigner для того, чтобы рисовать GUI. С помощью утилиты pyuic перегоняю это в пайтоновский код. В общем все как обычно. Но после преобразования в пайтон на форме все ломается.
Вот форма в QtDesigner.
1SoVZCS5WZ8.jpg
А вот форма после преобразования pyuic:
0gWgICk31w8.jpg
Размер окна поменялся, а меню скрылось за стрелочкой.

Вот код .ui файла
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QPlainTextEdit" name="txbx_text">
    <property name="geometry">
     <rect>
      <x>3</x>
      <y>0</y>
      <width>391</width>
      <height>251</height>
     </rect>
    </property>
    <property name="readOnly">
     <bool>true</bool>
    </property>
    <property name="plainText">
     <string/>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>400</width>
     <height>21</height>
    </rect>
   </property>
   <widget class="QMenu" name="menu">
    <property name="title">
     <string>Файл</string>
    </property>
    <addaction name="mnu_open"/>
   </widget>
   <widget class="QMenu" name="menu_2">
    <property name="title">
     <string>Лог</string>
    </property>
    <addaction name="mnu_export"/>
    <addaction name="mnu_add_log"/>
    <addaction name="mnu_view"/>
   </widget>
   <addaction name="menu"/>
   <addaction name="menu_2"/>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
  <action name="mnu_open">
   <property name="text">
    <string>Открыть</string>
   </property>
  </action>
  <action name="mnu_export">
   <property name="text">
    <string>Экспорт</string>
   </property>
  </action>
  <action name="mnu_add_log">
   <property name="text">
    <string>Добавить в лог</string>
   </property>
  </action>
  <action name="mnu_view">
   <property name="text">
    <string>Просмотр</string>
   </property>
  </action>
  <action name="actionDsfsdf">
   <property name="text">
    <string>dsfsdf</string>
   </property>
  </action>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>


А это код .py ui файла:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created: Tue Apr 19 23:18:32 2016
#      by: PyQt4 UI code generator 4.11.2
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(400, 300)
        self.centralWidget = QtGui.QWidget(MainWindow)
        self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
        self.txbx_text = QtGui.QPlainTextEdit(self.centralWidget)
        self.txbx_text.setGeometry(QtCore.QRect(3, 0, 391, 251))
        self.txbx_text.setReadOnly(True)
        self.txbx_text.setPlainText(_fromUtf8(""))
        self.txbx_text.setObjectName(_fromUtf8("txbx_text"))
        # MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtGui.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 21))
        self.menuBar.setObjectName(_fromUtf8("menuBar"))
        self.menu = QtGui.QMenu(self.menuBar)
        self.menu.setObjectName(_fromUtf8("menu"))
        self.menu_2 = QtGui.QMenu(self.menuBar)
        self.menu_2.setObjectName(_fromUtf8("menu_2"))
        # MainWindow.setMenuBar(self.menuBar)
        self.statusBar = QtGui.QStatusBar(MainWindow)
        self.statusBar.setObjectName(_fromUtf8("statusBar"))
        # MainWindow.setStatusBar(self.statusBar)
        self.mnu_open = QtGui.QAction(MainWindow)
        self.mnu_open.setObjectName(_fromUtf8("mnu_open"))
        self.mnu_export = QtGui.QAction(MainWindow)
        self.mnu_export.setObjectName(_fromUtf8("mnu_export"))
        self.mnu_add_log = QtGui.QAction(MainWindow)
        self.mnu_add_log.setObjectName(_fromUtf8("mnu_add_log"))
        self.mnu_view = QtGui.QAction(MainWindow)
        self.mnu_view.setObjectName(_fromUtf8("mnu_view"))
        self.actionDsfsdf = QtGui.QAction(MainWindow)
        self.actionDsfsdf.setObjectName(_fromUtf8("actionDsfsdf"))
        self.menu.addAction(self.mnu_open)
        self.menu_2.addAction(self.mnu_export)
        self.menu_2.addAction(self.mnu_add_log)
        self.menu_2.addAction(self.mnu_view)
        self.menuBar.addAction(self.menu.menuAction())
        self.menuBar.addAction(self.menu_2.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.menu.setTitle(_translate("MainWindow", "Файл", None))
        self.menu_2.setTitle(_translate("MainWindow", "Лог", None))
        self.mnu_open.setText(_translate("MainWindow", "Открыть", None))
        self.mnu_export.setText(_translate("MainWindow", "Экспорт", None))
        self.mnu_add_log.setText(_translate("MainWindow", "Добавить в лог", None))
        self.mnu_view.setText(_translate("MainWindow", "Просмотр", None))
        self.actionDsfsdf.setText(_translate("MainWindow", "dsfsdf", None))


P.S. Я, конечно, понимаю, что можно покопаться в коде формы на пайтоне, но нельзя ли как-то автомитизировать этот процесс? Чтобы форма сразу появлялась правильно.
Заранее спасибо
  • Вопрос задан
  • 2025 просмотров
Пригласить эксперта
Ответы на вопрос 1
karulyana
@karulyana
Начинающий питонист
Что бы не копаться, лучше самому писать..
если решитесь вот ссылка хороших уроков, правда на PyQt5
python-3.ru/page/into-pyqt5
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы