Seite 1 von 1

QT Designer kann keinen Code erzeugen.

Verfasst: Donnerstag 9. Juli 2009, 16:49
von marcelr
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

Verfasst: Donnerstag 9. Juli 2009, 17:12
von Leonidas
Wozu willst du denn Code erzeugen?

Verfasst: Donnerstag 9. Juli 2009, 18:18
von snafu
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_()

Verfasst: Donnerstag 9. Juli 2009, 20:26
von cofi
@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

Verfasst: Freitag 10. Juli 2009, 08:14
von marcelr
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 :)

Verfasst: Freitag 10. Juli 2009, 10:17
von marcelr
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.

Verfasst: Freitag 10. Juli 2009, 10:19
von Leonidas
marcelr hat geschrieben:Hab heute eine Lösung gefunden, da ich ungern mit der UI-Datei arbeiten würde.
Warum?

Verfasst: Freitag 10. Juli 2009, 14:22
von marcelr
Ich sehe gerne den Code... und irgendwie habe ich das Gefühl, dann mehr zu sehen.
Ist eine rein subjektive Sache.

Verfasst: Freitag 10. Juli 2009, 15:16
von cofi
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)

Verfasst: Freitag 10. Juli 2009, 16:14
von Leonidas
marcelr hat geschrieben:Ist eine rein subjektive Sache.
Ja, subjektiv und unpraktisch. Ich sehe da hauptsächlich Nachteile in dem Verfahren.

Verfasst: Freitag 10. Juli 2009, 21:12
von jerch
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:

Verfasst: Samstag 11. Juli 2009, 09:45
von Leonidas
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.

Verfasst: Samstag 11. Juli 2009, 10:11
von snafu
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.

Verfasst: Montag 13. Juli 2009, 07:18
von marcelr
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. :)