QT Designer kann keinen Code erzeugen.

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
marcelr
User
Beiträge: 38
Registriert: Dienstag 19. August 2008, 09:34

Hallo,

ich wollte mit dem QT-Designer ein wenig herumspielen, doch wenn ich via Menü -> Formular -> Code anzeigen... gehe, wird mir folgende Fehlermeldung ausgegeben:
"Es konnte kein Code generiert werden."

"C:/Python25/Lib/site-packages/PyQt4/./.\uic" konnte nicht gestartet werden.
Ich weiß nicht mehr, was ich noch probieren soll, weil ich dazu auch gar nichts finde. Die Versionen passen. Ich habe sogar probiert, alles zu deinstallieren und nochmal via "python(x,y)" alles installiert (weil da die Versionen aufeinander abgestimmt sind) aber dort bekomme ich dieselbe Fehlermeldung. Ich habe es auch schon auf zwei verschiedenen PC's ausprobiert, also muss ich wahrscheinlich irgendwas essentielles nicht berücksichtigen.

Würde mich sehr freuen bei Hilfe.

Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wozu willst du denn Code erzeugen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du musst keinen Code mit dem Designer erzeugen. Du bindest einfach deine ui-Datei mittels `PyQt4.uic.loadUi()` in dein Widget (z.B. ein QMainWindow) ein.

Ein Minimalbeispiel sieht so aus:

Code: Alles auswählen

import sys
from PyQt4 import QtGui, uic

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        uic.loadUi(dein_ui-file, self)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@snafu Du hast da einen ungueltigen Namen in Zeile 7 ;)

@OP: Einmal das passende Kapitel in der Doku durchlesen: http://www.riverbankcomputing.co.uk/sta ... t-designer
marcelr
User
Beiträge: 38
Registriert: Dienstag 19. August 2008, 09:34

Achso, dann bin ich da ganz falsch herangegangen... dachte, ich klicke mir das einfach zusammen, lasse mir den Code erzeugen und kann darauf aufbauen.

Vielen Dank für die Antworten :)
marcelr
User
Beiträge: 38
Registriert: Dienstag 19. August 2008, 09:34

Hab heute eine Lösung gefunden, da ich ungern mit der UI-Datei arbeiten würde. Man kann sich UI-Dateien und Python-Klassen umwandeln lassen mittels dem Programm 'puic'. Bei mir sah das dann in etwa so aus:
C:\Python25\Lib\site-packages\PyQt4\uic>pyuic -o haupt.py C:\Python25\Lib\site-packages\PyQt4\test.ui
Der Parameter '-o' sorgt nur dafür, dass eine Datei erstellt wird (hier 'haupt.py') und danach halt der Pfad der UI-Datei.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

marcelr hat geschrieben:Hab heute eine Lösung gefunden, da ich ungern mit der UI-Datei arbeiten würde.
Warum?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
marcelr
User
Beiträge: 38
Registriert: Dienstag 19. August 2008, 09:34

Ich sehe gerne den Code... und irgendwie habe ich das Gefühl, dann mehr zu sehen.
Ist eine rein subjektive Sache.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Kannst du ja gerne machen, aber du solltest ihn in der Anwendung trotzdem dynamisch generieren lassen.
Es ist dann immernoch derselbe Code, allerdings brauchst du keine extra Schritte und bist deshalb nah am Python-Entwicklungsyzklus (Wobei das Code generieren nah an dem von C++ ist)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

marcelr hat geschrieben:Ist eine rein subjektive Sache.
Ja, subjektiv und unpraktisch. Ich sehe da hauptsächlich Nachteile in dem Verfahren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Ich sehe gerne den Code... und irgendwie habe ich das Gefühl, dann mehr zu sehen.
Ist eine rein subjektive Sache.
Das ist durchaus ein guter Grund, die ui-Datei zu kompilieren. Erklärt aber nicht, warum Du das auch für die Anwendung machst und eine Menge von Nachteilen erkaufst. Du kannst jederzeit die ui-Files in Code umwandeln, wenn Dir danach ist (warum auch immer, es ist definitiv selten nötig oder wird immer seltener von Nöten sein ;) ).

<Werbung für UI-Nutzung>
Der direkten Nutzung der ui-Datei mit 100% Flexibilitätgewinn bei kaum spürbarem Performanceeinbruch (API-Konformität vorausgesetzt) stehen "Neukompilieren" und Frust wie "Warum geht das nicht? - Hm weiß nicht... denk - Ah ui-Datei nicht übersetzt..." gegenüber.
</Werbung für UI-Nutzung> ;) ;) ;)

Aber letztendlich liegt die Entscheidung bei Dir :)

Fazit:
Für superdisziplinierte Menschen ist die pyuic-Methode ein Gewinn, da es doch ein klein wenig Rechenzeit spart, für alle anderen wie mich jedoch eher nicht. :oops:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jerch hat geschrieben:<Werbung für UI-Nutzung>
Der direkten Nutzung der ui-Datei mit 100% Flexibilitätgewinn bei kaum spürbarem Performanceeinbruch (API-Konformität vorausgesetzt) stehen "Neukompilieren" und Frust wie "Warum geht das nicht? - Hm weiß nicht... denk - Ah ui-Datei nicht übersetzt..." gegenüber.
</Werbung für UI-Nutzung> ;) ;) ;)
Weitere Nachteile sind "hmm, ich könnte doch hier einfach mal diese Zeile ändern", womit man sich einhandelt dass man bei jeder Neugenerierung die Änderung neu machen muss. Zudem ist der generierte Code sicherlich nicht so wie ein Mensch den schreiben würde und hält sich ggf. nicht an die Code-Styles deines Projektes. Schließlich ist es auch so, dass man die UI-Datei ja dennoch brauch, da man die generierte Datei ja nicht im GUI-Designer bearbeiten kann, wenn einem mal was nicht passt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Richtig. Es ist einfach transparenter, wenn man die ui-Datei mitgibt anstatt die generierte py-Datei. Wenn man wollte, könnte man dieses Design sogar in anderen Sprachen weiterverwenden, wenn man z.B. eine Version machen will, die C++ statt Python für die Logik verwendet. Sehen kann man den Programmcode für die GUI ja auch, indem man sich die XML-Strukturierung anguckt. Generieren würde ich höchstens manchmal zu Lernzwecken, aber nicht für den eigentlichen Entwicklungsprozess. Denn was da herauskommt, ist wirklich alles andere als PEP-8. Zudem - wenn man es schon subjektiv sieht - fände ich es komisch, an der Stelle fremden Python-Code zu haben mit so einem Generierungsvermerk.
marcelr
User
Beiträge: 38
Registriert: Dienstag 19. August 2008, 09:34

Ich danke euch vielmals für die ganzen Ansätze, ihr habt mir sehr geholfen und ich denke, dass ich das nun auch so machen werde. :)
Antworten