Santtiago
Santtiago

Reputation: 13

How do I load a ui in pyqt using a string

I'm trying to load a UI with PyQt but saving the "data" in a string, like, save XML data in a string, to use loadUi()

Example:

template = '''
<?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>... (and more code)
'''

So, actually I'm using this code:

class Install(QtWidgets.QMainWindow):
    def __init__(self):
        super(Install, self).__init__()
        uic.loadUi(template, self)

Upvotes: 1

Views: 583

Answers (1)

eyllanesc
eyllanesc

Reputation: 243993

You can use io.StringIO():

import io
import sys

from PyQt5 import QtWidgets, uic


template = """<?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>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QPushButton" name="pushButton">
      <property name="text">
       <string>PushButton</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>28</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>"""


class Install(QtWidgets.QMainWindow):
    def __init__(self):
        super(Install, self).__init__()

        f = io.StringIO(template)
        uic.loadUi(f, self)


def main():
    app = QtWidgets.QApplication(sys.argv)
    install = Install()
    install.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

Upvotes: 2

Related Questions