Qt for Python UiFiles

From Qt Wiki
Revision as of 12:01, 24 March 2016 by Wieland (talk | contribs) (clean-up)
Jump to navigation Jump to search

This page describes the use of Qt Creator to create Graphical Interfaces for your PySide Software. You will need Qt Creator, Pyside and PySide-Tools (pyuic and pyrcc).

If you don't know how to use Qt Creator, please go to Qt Creator Widget Tutorial .

At Qt Creator, create a new Qt Design Form, choose "Main Window" for template. And save as "mainwindow.ui" . Add a Qlabel to the center of the centralwidget.

And your mainwindow.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>82</width>
 <height>64</height>
 </rect>
 </property>
 <property name="windowTitle">
 <string>MainWindow</string>
 </property>
 <widget class="QWidget" name="centralwidget">
 <layout class="QGridLayout" name="gridLayout">
 <item row="0" column="0">
 <widget class="QLabel" name="label">
 <property name="text">
 <string>Hello World!</string>
 </property>
 </widget>
 </item>
 </layout>
 </widget>
 <widget class="QMenuBar" name="menubar">
 <property name="geometry">
 <rect>
 <x>0</x>
 <y>0</y>
 <width>82</width>
 <height>21</height>
 </rect>
 </property>
 </widget>
 <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

Python can't read this ui file so to make it readable to python we need to process it with a script pyside-uic. The command is:

pyside-uic mainwindow.ui -o mainwindow.py

The generated output file "mainwindow.py" is as follows:

#-*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created: Mon Dec 10 16:22:24 2012
# by: pyside-uic 0.2.13 running on PySide 1.1.0
#
# WARNING! All changes made in this file will be lost!

from PySide import QtCore, QtGui

class Ui_MainWindow(object):
 def setupUi(self, MainWindow):
 MainWindow.setObjectName("MainWindow")
 MainWindow.resize(82, 64)
 self.centralwidget = QtGui.QWidget(MainWindow)
 self.centralwidget.setObjectName("centralwidget")
 self.gridLayout = QtGui.QGridLayout(self.centralwidget)
 self.gridLayout.setObjectName("gridLayout")
 self.label = QtGui.QLabel(self.centralwidget)
 self.label.setObjectName("label")
 self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
 MainWindow.setCentralWidget(self.centralwidget)
 self.menubar = QtGui.QMenuBar(MainWindow)
 self.menubar.setGeometry(QtCore.QRect(0, 0, 82, 21))
 self.menubar.setObjectName("menubar")
 MainWindow.setMenuBar(self.menubar)
 self.statusbar = QtGui.QStatusBar(MainWindow)
 self.statusbar.setObjectName("statusbar")
 MainWindow.setStatusBar(self.statusbar)

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

def retranslateUi(self, MainWindow):
 MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
 self.label.setText(QtGui.QApplication.translate("MainWindow", "Hello World!", None, QtGui.QApplication.UnicodeUTF8))

we have to modify this mainwindow.py module:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mainwindow.ui' 
# 
# Created: Mon Dec 10 16:22:24 2012 
# by: pyside-uic 0.2.13 running on PySide 1.1.0 
# 
# WARNING! All changes made in this file will be lost! 

import sys
from PySide import QtCore, QtGui

class Ui_MainWindow(object):
 def setupUi(self, MainWindow):
 MainWindow.setObjectName("MainWindow")
 MainWindow.resize(82, 64)
 self.centralwidget = QtGui.QWidget(MainWindow)
 self.centralwidget.setObjectName("centralwidget")
 self.gridLayout = QtGui.QGridLayout(self.centralwidget)
 self.gridLayout.setObjectName("gridLayout")
 self.label = QtGui.QLabel(self.centralwidget)
 self.label.setObjectName("label")
 self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
 MainWindow.setCentralWidget(self.centralwidget)
 self.menubar = QtGui.QMenuBar(MainWindow)
 self.menubar.setGeometry(QtCore.QRect(0, 0, 82, 21))
 self.menubar.setObjectName("menubar")
 MainWindow.setMenuBar(self.menubar)
 self.statusbar = QtGui.QStatusBar(MainWindow)
 self.statusbar.setObjectName("statusbar")
 MainWindow.setStatusBar(self.statusbar)

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

def retranslateUi(self, MainWindow):
 MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
 self.label.setText(QtGui.QApplication.translate("MainWindow", "Hello World!", None, QtGui.QApplication.UnicodeUTF8))

class ControlMainWindow(QtGui.QMainWindow):
 def ''init''(self, parent=None):
 super(ControlMainWindow, self).''init''(parent)
 self.ui = Ui_MainWindow()
 self.ui.setupUi(self)

if ''name'' == "''main''":
 app = QtGui.QApplication(sys.argv)
 mySW = ControlMainWindow()
 mySW.show()
 sys.exit(app.exec_())

And to run:

python mainwindow.py