web-dev-qa-db-fra.com

Lier un fichier .ui qtDesigner à python/pyqt?

Donc, si je vais dans QtDesigner et que je construis une interface utilisateur, elle sera enregistrée en tant que fichier .ui. Comment puis-je faire cela en tant que fichier python ou l'utiliser en python?

70
Chris

Une autre façon d'utiliser .ui dans votre code est la suivante:

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

les deux approches sont bonnes. N'oubliez pas que si vous utilisez des fichiers de ressources Qt (extrêmement utiles) pour les icônes, vous devez également les compiler:

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

Notez que lorsque uic compile l'interface, il ajoute 'import images_rc' à la fin du fichier .py. Vous devez donc compiler les ressources dans le fichier portant ce nom ou le renommer en code généré.

54
Maxim Popravko

Combinaison des réponses de Max et de la liste de diffusion de Shriramana Sharma , j'ai construit un petit exemple de travail pour charger un fichier mywindow.ui contenant une QMainWindow (choisissez donc simplement de créer une fenêtre principale dans la boîte de dialogue File-New de Qt Designer).

C'est le code qui le charge:

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 __== '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    sys.exit(app.exec_())
38
metakermit

Vous devez générer un fichier python à partir de votre fichier d'interface utilisateur avec l'outil pyuic (site-packages\pyqt4\bin)

pyuic form1.ui > form1.py

avec pyqt4

pyuic4.bat form1.ui > form1.py

Ensuite, vous pouvez importer le formulaire1 dans votre script.

28
luc

J'ai trouvé cet article très utile. 

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

Je vais décrire brièvement les actions pour créer et modifier le fichier .ui en fichier .py, tiré de cet article.

  1. Lancez Qt Designer à partir du menu Démarrer.
  2. À partir de la fenêtre "Nouveau formulaire", créez une "fenêtre principale".
  3. De "Afficher les widgets" vers le bas de votre "Menu Boîte à widgets" sur le côté gauche
    Ajouter un "Label Widget". (Cliquez Drag and Drop)
  4. Double-cliquez sur le widget Label nouvellement ajouté pour changer son nom en "Hello World".
  5. À ce stade, vous pouvez utiliser la touche de raccourci clavier Contrôle + R pour voir à quoi il ressemblera.
  6. Ajoutez des boutons, du texte ou d’autres widgets par glisser-déposer si vous le souhaitez.
  7. Enregistrez maintenant votre formulaire .. Fichier-> Enregistrer sous-> "Hello World.ui" (Control + S affichera également
    l’option "Enregistrer sous") Notez le répertoire dans lequel vous avez enregistré votre fichier "Hello World" .ui
    fichier. (J'ai sauvé le mien en (C :) pour plus de commodité)

Le fichier est créé et enregistré, nous allons maintenant générer le code Python à l’aide de pyuic!

  1. Dans votre menu Démarrer, ouvrez une fenêtre de commande.
  2. Maintenant, "cd" dans le répertoire où vous avez sauvegardé votre "Hello World.ui". Pour moi, je devais simplement le faire enregistré dans.
  3. Lorsque vous arrivez au répertoire où votre fichier est stocké, tapez ce qui suit.
  4. pyuic4 -x helloworld.ui -o helloworld.py
  5. Toutes nos félicitations!! Vous avez maintenant une application graphique Python Qt4 !! 
  6. Double-cliquez sur votre fichier helloworld.py pour l'exécuter. (J'utilise pyscripter et après un double clic
    il s’ouvre dans pyscripter, puis je "lance" le fichier à partir de là)

J'espère que ça aide quelqu'un.

24
xopenex

Vous pouvez également utiliser uic dans PyQt5 avec le code suivant.

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 __== '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Ui()
    sys.exit(app.exec_())
12
Akshay

Vous pouvez convertir vos fichiers .ui en un fichier python exécutable à l’aide de la commande ci-dessous.

pyuic4 -x form1.ui > form1.py

Maintenant, vous pouvez immédiatement exécuter le fichier python en tant que

python3(whatever version) form1.py

Vous pouvez importer ce fichier et vous pouvez l'utiliser.

7
Jeba

Selon moi, la méthode la plus propre consiste à exporter d'abord vers .py, comme indiqué ci-dessus: 

pyuic4 foo.ui > foo.py

Et utilisez-le ensuite dans votre code (par exemple, main.py), comme:

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 __== "__main__":
    main()

De cette façon, les personnes qui n'utilisent pas qt-designer ne peuvent pas lire le code, mais conserve également votre code de fonctionnalité en dehors de foo.py qui pourrait être remplacé par le concepteur. Vous venez de référencer les classes ui à MyWindow, comme indiqué ci-dessus.

7
chefarov

vous pouvez compiler les fichiers d'interface utilisateur comme celui-ci

pyuic4 -x helloworld.ui -o helloworld.py
5
reviloera

Afin de compiler des fichiers .ui en fichiers .py, j'ai:

python pyuic.py form1.ui > form1.py

Att.

4
filipemr

dans pyqt5 pour convertir un fichier ui en fichier .py

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

1
Aju George

Utilisation d'Anaconda3 (septembre 2018) et de QT Designer 5.9.5 . Dans QT Designer, enregistrez votre fichier sous ui . Ouvrez l'invite Anaconda. Recherchez votre fichier: cd C: .... (copiez/collez le chemin d'accès de votre fichier) . Puis écrivez: pyuic5 -x helloworld.ui -o helloworld.py (helloworld = nom de votre fichier). Entrez . Lancez Spyder. Ouvrez votre fichier .py.

0
Pifpy