Verknüpfen einer qtDesigner .ui-Datei mit python / pyqt?

80

Wenn ich also in QtDesigner gehe und eine Benutzeroberfläche erstelle, wird diese als .ui-Datei gespeichert. Wie kann ich dies als Python-Datei erstellen oder in Python verwenden?

Chris
quelle
1
Ich habe den PySide QUiLoader verwendet, um genau das zu erreichen - siehe Beitrag [4442286] [1] [1]: stackoverflow.com/questions/4442286
Sven
Die folgende Methode ist noch praktischer: stackoverflow.com/questions/14892713/…
iled

Antworten:

61

Eine andere Möglichkeit, .ui in Ihrem Code zu verwenden, ist:

from PyQt4 import QtCore, QtGui, uic
class MyWidget(QtGui.QWidget)
    ...
    #somewhere in constructor:
    uic.loadUi('MyWidget.ui', self)

Beide Ansätze sind gut. Vergessen Sie nicht, dass Sie Qt-Ressourcendateien (äußerst nützlich) für Symbole usw. auch kompilieren müssen, wenn Sie sie verwenden:

pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc

Beachten Sie, dass beim uicKompilieren der Schnittstelle am Ende der PY-Datei 'import images_rc' hinzugefügt wird. Sie müssen also Ressourcen in die Datei mit diesem Namen kompilieren oder sie im generierten Code umbenennen.

Maxim Popravko
quelle
2
Können Sie hinzufügen, wie Sie nach Abschluss auf eine Variable zugreifen können? Wie PushButton?
Jonathan
2
@JonathanLeaders Wenn in der .ui-Datei eine Schaltfläche definiert ist, rufen Sie sie einfach so auf: self.pushButton. Sie können ui auch in jedes gewünschte Klassenattribut laden: uic.loadUi ('uifile.ui', self.ui) und Widgets und ähnliches wie self.ui.pushButton aufrufen.
Maxim Popravko
48

Die Kombination von Max Antwort und Shriramana Sharma Mailingliste senden , ich baute ein kleines funktionierendes Beispiel zum Laden einer mywindow.uiDatei mit einem QMainWindow(so wählen , nur ein Hauptfenster in Qt Designer erstellen zu können File-NewDialog).

Dies ist der Code, der es lädt:

import sys
from PyQt4 import QtGui, uic

class MyWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        uic.loadUi('mywindow.ui', self)
        self.show()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    sys.exit(app.exec_())
Metakermit
quelle
3
Dies sollte die beste Antwort sein, da es sich um ein vollständiges Beispiel handelt.
Francesco Pasa
29

Sie müssen mit dem pyuic-Tool (site-packages \ pyqt4 \ bin) eine Python-Datei aus Ihrer UI-Datei generieren.

pyuic form1.ui > form1.py

mit pyqt4

pyuic4.bat form1.ui > form1.py

Dann können Sie das Formular1 in Ihr Skript importieren.

luc
quelle
25

Ich fand diesen Artikel sehr hilfreich.

http://talk.maemo.org/archive/index.php/t-43663.html

Ich werde kurz die Aktionen zum Erstellen und Ändern der .ui-Datei in die .py-Datei aus diesem Artikel beschreiben.

  1. Starten Sie Qt Designer über Ihr Startmenü.
  2. Erstellen Sie im Fenster "Neues Formular" das Hauptfenster.
  3. Fügen Sie von "Widgets anzeigen" unten in Ihrem "Widget-Box-Menü" auf der linken Seite
    ein "Label-Widget" hinzu. (Klicken Sie auf Drag & Drop)
  4. Doppelklicken Sie auf das neu hinzugefügte Label-Widget, um seinen Namen in "Hello World" zu ändern.
  5. An dieser Stelle können Sie mit der Tastenkombination Strg + R sehen, wie sie aussehen wird.
  6. Fügen Sie Schaltflächen, Text oder andere Widgets per Drag & Drop hinzu, wenn Sie möchten.
  7. Speichern Sie nun Ihr Formular. Datei-> Speichern unter-> "Hello World.ui" (Strg + S ruft auch die
    Option "Speichern unter" auf.) Notieren Sie sich das Verzeichnis, in dem Sie Ihre .ui-
    Datei "Hello World" gespeichert haben . (Ich habe meine in (C :) für die Bequemlichkeit gespeichert)

Die Datei wird erstellt und gespeichert, jetzt generieren wir den Python-Code daraus mit pyuic!

  1. Öffnen Sie in Ihrem Startmenü ein Befehlsfenster.
  2. Jetzt "cd" in das Verzeichnis, in dem Sie Ihre "Hello World.ui" gespeichert haben. Für mich musste ich nur "cd \" und war an meiner "C:>" Eingabeaufforderung, in der meine "Hello World.ui" gespeichert wurde.
  3. Wenn Sie zu dem Verzeichnis gelangen, in dem Ihre Datei gespeichert ist, geben Sie Folgendes ein.
  4. pyuic4 -x helloworld.ui -o helloworld.py
  5. Herzliche Glückwünsche!! Sie haben jetzt eine Python Qt4 GUI-Anwendung!
  6. Doppelklicken Sie auf Ihre Datei helloworld.py, um sie auszuführen. (Ich benutze Pyscripter und nach einem Doppelklick wird
    es in Pyscripter geöffnet, dann "starte" ich die Datei von dort)

Hoffe das hilft jemandem.

Xopenex
quelle
1
Ich habe kompiliert mit: pyuic4 helloworld.ui> helloworld.py. Man muss wirklich -x und -o Argumente an pyuic4 übergeben. Danke für die Auskunft!.
Muammar
Tolle Erklärung, vor allem, dass der "Generierung des GUI" -Codes tatsächlich in der generierten Datei enthalten ist, hat mir geholfen, Prost!
Valmond
16

Sie können uicPyQt5 auch mit dem folgenden Code verwenden.

from PyQt5 import uic, QtWidgets
import sys

class Ui(QtWidgets.QDialog):
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('SomeUi.ui', self)
        self.show()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Ui()
    sys.exit(app.exec_())
Akshay
quelle
12

Meiner Meinung nach ist es sauberer, zuerst wie oben beschrieben nach .py zu exportieren:

pyuic4 foo.ui > foo.py

Und verwenden Sie es dann in Ihrem Code (z. B. main.py) wie:

from foo import Ui_MyWindow


class MyWindow(QtGui.QDialog):
    def __init__(self):
        super(MyWindow, self).__init__()

        self.ui = Ui_MyWindow()
        self.ui.setupUi(self)

        # go on setting up your handlers like:
        # self.ui.okButton.clicked.connect(function_name)
        # etc...

def main():
    app = QtGui.QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

Auf diese Weise können andere Personen, die qt-designer nicht verwenden, den Code lesen, und Ihr Funktionscode bleibt außerhalb des Codes, der foo.pyvom Designer überschrieben werden könnte. Sie verweisen einfach uidurch die MyWindowKlasse wie oben gezeigt.

Stelen
quelle
self.ui.okButton.clicked.connect(self.function_name)gibt mir TypeError: event() takes 1 positional argument but 2 were given. Wie haben Sie es gelöst?
Ahsanul Haque
9

Mit dem folgenden Befehl können Sie Ihre .ui-Dateien in eine ausführbare Python-Datei konvertieren.

pyuic4 -x form1.ui > form1.py

Jetzt können Sie die Python-Datei sofort als ausführen

python3(whatever version) form1.py

Sie können diese Datei importieren und verwenden.

Jeba
quelle
Zu Ihrer Information Wenn Sie die Option -x weglassen, erhalten Sie nicht den Teil des Codes, der die Anwendung erstellt und ausführt. Ich habe einige Antworten gesehen, bei denen "-x" weggelassen wurde. Diese Antwort ist die vollständigste.
Keine Maschine
5

Sie können die UI-Dateien wie folgt kompilieren

pyuic4 -x helloworld.ui -o helloworld.py
reviloera
quelle
4

Um .ui-Dateien zu .py-Dateien zu kompilieren, habe ich:

python pyuic.py form1.ui > form1.py

Att.

filipemr
quelle
2

in pyqt5 zum Konvertieren von einer UI-Datei in eine .py-Datei

pyuic5.exe youruifile.ui -o outputpyfile.py -x

Aju George
quelle
0

Verwenden von Anaconda3 (September 2018) und QT Designer 5.9.5. Speichern Sie Ihre Datei im QT-Designer als Benutzeroberfläche. Öffnen Sie die Anaconda-Eingabeaufforderung. Suchen Sie nach Ihrer Datei: cd C: .... (Kopieren Sie den Zugriffspfad Ihrer Datei und fügen Sie ihn ein). Dann schreiben Sie: pyuic5 -x helloworld.ui -o helloworld.py (helloworld = Name Ihrer Datei). Eingeben. Starten Sie Spyder. Öffnen Sie Ihre Datei .py.

Pifpy
quelle