[PyQt] pyuic4 assign invalid roles to labels and fields in Form layout

Phil Thompson phil at riverbankcomputing.com
Tue Nov 9 18:34:54 GMT 2010


On Tue, 09 Nov 2010 19:25:28 +0100 (CET), Marián Kyral <mkyral at email.cz>
wrote:
> Hello,
> I've folloving ui file:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <ui version="4.0">
>  <class>Form</class>
>  <widget class="QWidget" name="Form">
>   <property name="geometry">
>    <rect>
>     <x>0</x>
>     <y>0</y>
>     <width>400</width>
>     <height>300</height>
>    </rect>
>   </property>
>   <property name="windowTitle">
>    <string>Form</string>
>   </property>
>   <layout class="QFormLayout" name="formLayout">
>    <item row="0" column="0">
>     <widget class="QLabel" name="label">
>      <property name="text">
>       <string>Jablka:</string>
>      </property>
>     </widget>
>    </item>
>    <item row="0" column="1">
>     <widget class="QLineEdit" name="lineEdit"/>
>    </item>
>    <item row="1" column="0">
>     <widget class="QLabel" name="label_2">
>      <property name="text">
>       <string>Hrušky:</string>
>      </property>
>     </widget>
>    </item>
>    <item row="1" column="1">
>     <widget class="QLineEdit" name="lineEdit_2"/>
>    </item>
>   </layout>
>  </widget>
>  <resources/>
>  <connections/>
> </ui>
> 
> pyuic4 generates following code:
> # -*- coding: utf-8 -*-
> 
> # Form implementation generated from reading ui file 'form_layout.ui'
> #
> # Created: Tue Nov  9 15:41:01 2010
> #      by: PyQt4 UI code generator 4.8.1
> #
> # WARNING! All changes made in this file will be lost!
> 
> from PyQt4 import QtCore, QtGui
> 
> try:
>     _fromUtf8 = QtCore.QString.fromUtf8
> except AttributeError:
>     _fromUtf8 = lambda s: s
> 
> class Ui_Form(object):
>     def setupUi(self, Form):
>         Form.setObjectName(_fromUtf8("Form"))
>         Form.resize(400, 300)
>         self.formLayout = QtGui.QFormLayout(Form)
>         self.formLayout.setObjectName(_fromUtf8("formLayout"))
>         self.label = QtGui.QLabel(Form)
>         self.label.setObjectName(_fromUtf8("label"))
>         self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
>         self.label)
>         self.lineEdit = QtGui.QLineEdit(Form)
>         self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
>         self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
>         self.lineEdit)
>         self.label_2 = QtGui.QLabel(Form)
>         self.label_2.setObjectName(_fromUtf8("label_2"))
>         self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
>         self.label_2)
>         self.lineEdit_2 = QtGui.QLineEdit(Form)
>         self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2"))
>         self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
>         self.lineEdit_2)
> 
>         self.retranslateUi(Form)
>         QtCore.QMetaObject.connectSlotsByName(Form)
> 
>     def retranslateUi(self, Form):
>         Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form",
>         None, QtGui.QApplication.UnicodeUTF8))
>         self.label.setText(QtGui.QApplication.translate("Form",
"Jablka:",
>         None, QtGui.QApplication.UnicodeUTF8))
>         self.label_2.setText(QtGui.QApplication.translate("Form",
>         "Hrušky:", None, QtGui.QApplication.UnicodeUTF8))
> 
> As you can see, labels have assigned FieldRole and fields have assigned
> LabelRole.
> 
>         self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
>         self.label)
>         self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
>         self.lineEdit)
> 
> This problem is at least in pyqt 4.8.0 and 4.8.1.

A patch to fix it was posted to the list a few days ago.

Phil


More information about the PyQt mailing list