Utiliser QTDesigner avec PyQT et Python 2.6

je suis nouveau en Python et je commence à m'enseigner la programmation GUI (avec un peu de chance) en utilisant PyQT4.7 et python 2.6

je viens de télécharger L'ensemble du paquet PyQT/QT4 (y compris QTDesigner) à partir du site Web de PyQT, mais il semble QTDesigner, qui semble incroyable à utiliser comme un internaute novice (puisque vous pouvez voir tous les attributs / propriétés / par défaut etc) de chaque widget et modifier visuellement les propriétés est grande, mais PyQT semble ne pas définir QTDesigner à intégrer directement avec PyQT et PyQTs scripts de génération de code python:

i.e.: appuyer sur "View Code", tente D'exécuter le script Designer - > c++ appelé (uic) à la place du pyuic.py script, etc.

y a-t-il un moyen D'amener QTDesigner à s'intégrer étroitement avec PyQT pour la génération de code à la volée comme il le fait avec C++?

si ce n'est pas le cas, est-ce que cela signifie que je dois coder toute L'interface graphique de QT dans mon IDE Python et rechercher toute la documentation et le code boilerplate pour chaque widget? (semble très inefficace et inélégant par rapport au simple fait D'avoir qtdesigner+intégration Python).

Quelle est la chaîne d'outils habituelle//flux de production de L'utilisation concepteur avec PyQT? (Si aucune intégration directe n'est possible -- est-ce que les utilisateurs de python+pyQT sautent en utilisant QTDesigner tous ensemble et écrivent manuellement tout le code Qt GUI en python?)

tout autre conseil / suggestion pour un internaute novice de PyQT serait apprécié. Merci!

ps je connais un tas de vous allez probablement me dire à tout le sucer et code de l'intervalle QT de l'INTERFACE utilisateur par la main, mais si j'utilise le Concepteur lors de l'apprentissage comme demandé ci-dessus, veuillez fournir un moyen de le faire afin que je puisse en apprendre plus facilement, merci!

20
demandé sur gruszczy 2010-03-22 05:08:09

4 réponses

j'ai commencé à écrire ma première application PyQT (PyQT n'est utilisé que pour gérer GUI), et il semble que la bonne chaîne d'outils soit: QtDesigner à générer .UC s et gérer les ressources et certains IDE, qui peuvent définir QtDesigner pour les éditer. J'utilise Eclipse, car il est très personnalisable. Vous pouvez compiler votre .qrc et .l'interface de la demande en faisant un peu comme ça au démarrage de l'application, ou lors de l'installation, ou à tout autre moment:

os.system("pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc")
uic.compileUiDir(appDir + '/ui', True)

et puis en utilisant les classes générées ceci façon:

class MyMainWindow(QtGui.QMainWindow):

    def __init__(self, owner):
        QtGui.QMainWindow.__init__(self)
        # 'Ui_MyMainWindow' is the class, that was generated by uic, 
        # naming convention is: 'Ui_' plus the name of root widget in designer
        self.ui = Ui_MyMainWindow()
        self.ui.setupUi(self)

ou vous pouvez charger .ui directement lorsque le conteneur entre:

    QtGui.QMainWindow.__init__(self)
    self.ui = None
    uic.loadUi('MyMainWindowUI.ui', self.ui)
    #now you have the instance of Ui_MyMainWindow in self.ui too, as above

notez que j'ai ajouté de l'INTERFACE utilisateur suffixe .nom du fichier ui, il a été fait pour éviter l'intersection de nom, cause nom de .le fichier py, généré par uic, n'est pas un nom de classe commençant par 'Ui_', mais seulement un widget root.

Et une autre remarque: à la fin du fichier généré uic lieux importer %.QRC name%_rc ' (par défaut est la chaîne d'importation images_rc), donc vous devez le savoir lorsque vous utilisez pyrcc4.

toute l'approche est assez souple, elle prend tout le travail fictif de codage ui de vous; mais vous pouvez encore faire un peu de réglage fin dans MyMainWindow.l'attribut ui, où l'instance de Ui_MyMainWindow se situe; et il évite l'héritage inutile. Personnellement, je fais _connectSlots et _inititintefrace méthodes dans MyMainWindow pour faire un concepteur de travail ne peut pas.

je dois quand même noter que l'écriture de code d'interface par vous-même est une bonne approche, parce que le code, généré par uic, est LAID. Je préfère de charge .ui en place par loadUi () pour cette raison:) et si vous avez beaucoup de commandes PyQT personnalisées, c'est tellement boooring pour les amener dans QtDesigner..

20
répondu Maxim Popravko 2010-03-25 05:22:22

ce que j'ai fait c'est que j'ai fait mon propre exécutable uic qui est un wrapper pour le pyuic.py script.

Vous aurez besoin...

  1. Pour obtenir et installer py2exe

  2. remplacer PYTHON_PATH dans le uic.py code ci-dessous

  3. éditer le qt.fichier conf dans le site-packages\PyQt4 et définir binaires=chemin vers le dossier contenant l'exe uic une fois qu'il est fait.

  4. dans l'invite de commande naviguer vers le dossier où setup.py et uic.py sont ensuite lancés la commande suivante "python setup.py py2exe".

//----uic.py

#uic.py
import subprocess
import sys

args = ""

for arg in sys.argv: 
    if sys.argv[0] != arg:
        args += arg + " "


# Start pyuic.py script
command = 'python %PYTHON_PATH%\PyQt4\uic\pyuic.py '+ args
out = ''


child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
complete = False
while True:
    out = child.stderr.read(1)
    if out == '' and child.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()

//----- setup.py

#setup.py    
from distutils.core import setup
import py2exe

setup(windows=[{"script":"uic.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtCore"]}})
2
répondu WithMetta 2012-11-19 20:16:49

vous pouvez courir pyuic (ou plutôt pyuic4) de main, dans votre console. Vous pouvez créer votre interface graphique en utilisant designer avec Python, tout comme vous le feriez avec C++.

au fait: j'ai écrit tous les trucs GUI pour mon application (10k De code) à la main. Je n'aime pas vraiment les concepteurs de GUI et de travailler avec du code généré, quand vous avez besoin de modifier quelque chose.

1
répondu gruszczy 2010-03-22 18:11:49

QtDesigner utilise uic.exe pour générer à la volée du code C++. uic.exe est un outil en ligne de commande, il obtient des noms de fichiers comme paramètres d'entrée. Pour l'intégration avec python, vous pouvez écrire un programme en python qui utilise pyuic.py, faites correspondre les entrées avec uic.exe'entrée (commande, switchs, etc.), convertissez-le en un exécutable (en utilisant py2exe) et renommez l'exécutable en uic.exe. alors remplacez-le par uic.exe dans le répertoire bin de Qt (uic.exe n'existe pas dans PyQt que je sache). Vous devriez juste faire attention à la saisie les arguments de uic.exe et votre macro (ils doivent correspondre ensemble).

je pense que votre programme aura besoin de savoir python path (pour utiliser pyuic). si vous utilisez windows, vous pouvez obtenir le chemin d'accès du registre.

0
répondu sorush-r 2010-08-29 18:22:14