PyQt - Aus Ui-Datei umgew. Pythonklasse Fenster leer

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
flyingpy
User
Beiträge: 10
Registriert: Donnerstag 10. Juli 2008, 07:39
Wohnort: Wr. Neustadt

Sonntag 13. Juli 2008, 14:22

Hi!

Wer kann dieses Problem lösen?

Ich arbeite mich gerade durch das E-Book "Python Das umfassende Handbuch" und hänge beim Kapitel "Grafische Benutzeroberflächen".
http://www.galileocomputing.de/openbook ... efdab7d505

Das Problem: Ein mit QtDesigner erstellter Dialog zur Benutzereingabe wurde als ui-Datei gespeichert und mit pyuic4 in eine Python-Klasse umgewandelt. Folgende Programmdatei wurde erstellt und soll den Dialog anzeigen:

import sys
from PyQt4 import QtGui
from hauptdialog import Ui_Hauptdialog as Dlg

class MeinDialog(QtGui.QDialog, Dlg):
def __init__(self):
QtGui.QDialog.__init__(self)
self.setupUi(self)

app = QtGui.QApplication(sys.argv)
dialog = MeinDialog()
dialog.show()
sys.exit(app.exec_())

Die erforderliche Einrückungen im Originalscript sind korrekt wusste aber nicht wie ich sie hier anzeigen kann.

Nun mein Problem! Alles erdenkliche habe ich versucht aber es öffnet sich bei Aufruf der Programmdatei nur ein leeres Pythonfenster!?!

Umgebungsvariable PYTHONPATH ist gesetzt:
C:\Python25;C:\Python25\DLLs;C:\Python25\Lib;C:\Python25\Lib\encodings;C:\Python25\Lib\lib-tk

Das ist genau das Beispiel aus dem oben angeführten Buch, die Umgebungsvariable habe ich jedoch selber gesetzt.

Ersuche Euch um Hilfe, würde Python auch gerne beherrschen.

Danke im Voraus
flyingpy
lunar

Sonntag 13. Juli 2008, 15:43

flyingpy hat geschrieben:Ich arbeite mich gerade durch das E-Book "Python Das umfassende Handbuch" und hänge beim Kapitel "Grafische Benutzeroberflächen".
Die Qualität dieses Buches ist nicht gerade hoch. Eine Forumssuche verrät mehr.
Die erforderliche Einrückungen im Originalscript sind korrekt wusste aber nicht wie ich sie hier anzeigen kann.
Die Schaltfläche "Highlighted Code" samt neben stehender Combobox ist nicht zum Scherz da ;)
Nun mein Problem! Alles erdenkliche habe ich versucht aber es öffnet sich bei Aufruf der Programmdatei nur ein leeres Pythonfenster!?!
Python ist eine Programmiersprache, eine Programmiersprache hat keine Fenster. Was also soll ein "Pythonfenster" sein?

Ist PyQt4 auch korrekt installiert? Was passiert, wenn du die Daten über die Konsole ausführst? Fehlermeldungen? Tracebacks?
flyingpy
User
Beiträge: 10
Registriert: Donnerstag 10. Juli 2008, 07:39
Wohnort: Wr. Neustadt

Sonntag 13. Juli 2008, 16:54

[lunar hat folgendes geschrieben:]
Die Schaltfläche "Highlighted Code" samt neben stehender Combobox ist nicht zum Scherz da

und

[weiters schrieb lunar:]
Python ist eine Programmiersprache, eine Programmiersprache hat keine Fenster. Was also soll ein "Pythonfenster" sein?


Nun dazu folgendes:
Ich bin neu in diesem Forum und versuche mein Bestes um perfekt zu werden. Aber alle haben einmal bei Null angefangen, so ich auch gerade. Weiters habe ich nicht die Möglichkeit eine Ausbildung in all diesen Sachen zu erhalten und so habe ich mir mein bisheriges Wissen selber angeeignet!

Mit leerem Pythonfenster meine ich, es öffnet sich nach Aufruf der folgenden Programmdatei ein leeres Fenster welches, so nehme ich an, von der importierten Klasse QDialog erzeugt wird.

Code: Alles auswählen

import sys 
from PyQt4 import QtGui 
from hauptdialog import Ui_Hauptdialog as Dlg

class MeinDialog(QtGui.QDialog, Dlg): 
    def __init__(self): 
        QtGui.QDialog.__init__(self) 
        self.setupUi(self)

app = QtGui.QApplication(sys.argv) 
dialog = MeinDialog() 
dialog.show() 
sys.exit(app.exec_())
Ob PyQt4 korrekt installiert ist? Naja, ich habe von der Website des PyQt-Entwicklers unter
http://www.riverbankcomputing.com
das Komplettpaket, welches das Qt-Framework und die zugehörigen Python-Bindings enthält, heruntergeladen und installiert durch doppelklick auf die Datei
PyQt-Py2.5gpl-4.4.2-1.

Dann setzte ich noch die Umgebungsvariable PYQTDESIGNERPATH:
C:\Python25\PyQt4;C:\Python25\PyQt4\examples;C:\Python25\PyQt4\examples\widgets

Wenn ich die Daten über die Konsole ausführe kommen weder Fehlermeldungen noch Tracebacks. :?
lunar

Sonntag 13. Juli 2008, 17:03

Mit leerem Pythonfenster meine ich, es öffnet sich nach Aufruf der folgenden Programmdatei ein leeres Fenster welches, so nehme ich an, von der importierten Klasse QDialog erzeugt wird.
Hast du mal in die generierte Datei geschaut, ob sie auch wirklich vollständig ist?
BlackJack

Sonntag 13. Juli 2008, 17:24

@flyingpy: Kenne mich mit PyQt nicht so aus, aber mir kommt etwas komisch vor, dass die `__init__()` von `Dlg` von Dir nicht aufgerufen wird!? Hat die Klasse keine `__init__()`-Methode?
lunar

Sonntag 13. Juli 2008, 17:31

BlackJack hat geschrieben:@flyingpy: Kenne mich mit PyQt nicht so aus, aber mir kommt etwas komisch vor, dass die `__init__()` von `Dlg` von Dir nicht aufgerufen wird!? Hat die Klasse keine `__init__()`-Methode?
Nein. Der einzige Zweck dieser Klasse ist es, "setupUi" bereitzustellen, sowie ein paar weitere Sache zwecks i10n. Die __init__ Methode wird nicht neu implementiert.
flyingpy
User
Beiträge: 10
Registriert: Donnerstag 10. Juli 2008, 07:39
Wohnort: Wr. Neustadt

Sonntag 13. Juli 2008, 19:30

lunar schrieb
Hast du mal in die generierte Datei geschaut, ob sie auch wirklich vollständig ist?

Mit meinen eben noch nicht guten Pythonkenntnissen kann ich nicht wirklich sagen ob die generierte Datei vollständig ist, aber ich denke sie ist es.
Im folgenden die generierte Datei.

Code: Alles auswählen

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'C:\Python25\hauptdialogU1.ui'
#
# Created: Wed Jul 09 12:24:23 2008
#      by: PyQt4 UI code generator 4.4.2
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

class Ui_hauptdialogU1(object):
    def setupUi(self, hauptdialogU1):
        hauptdialogU1.setObjectName("hauptdialogU1")
        hauptdialogU1.resize(400,503)
        self.groupBox = QtGui.QGroupBox(hauptdialogU1)
        self.groupBox.setGeometry(QtCore.QRect(20,10,361,331))
        self.groupBox.setObjectName("groupBox")
        self.widget = QtGui.QWidget(self.groupBox)
        self.widget.setGeometry(QtCore.QRect(20,30,332,272))
        self.widget.setObjectName("widget")
        self.gridLayout = QtGui.QGridLayout(self.widget)
        self.gridLayout.setObjectName("gridLayout")
        self.label = QtGui.QLabel(self.widget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label,0,0,1,1)
        self.vornameU1 = QtGui.QLineEdit(self.widget)
        self.vornameU1.setObjectName("vornameU1")
        self.gridLayout.addWidget(self.vornameU1,0,1,1,2)
        self.label_2 = QtGui.QLabel(self.widget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2,1,0,1,1)
        self.nachnameU1 = QtGui.QLineEdit(self.widget)
        self.nachnameU1.setObjectName("nachnameU1")
        self.gridLayout.addWidget(self.nachnameU1,1,1,1,2)
        self.label_3 = QtGui.QLabel(self.widget)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3,2,0,1,1)
        self.geburtsdatumU1 = QtGui.QDateEdit(self.widget)
        self.geburtsdatumU1.setObjectName("geburtsdatumU1")
        self.gridLayout.addWidget(self.geburtsdatumU1,2,1,1,1)
        spacerItem = QtGui.QSpacerItem(98,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem,2,2,1,1)
        self.label_4 = QtGui.QLabel(self.widget)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4,3,0,1,1)
        self.adresseU1 = QtGui.QTextEdit(self.widget)
        self.adresseU1.setObjectName("adresseU1")
        self.gridLayout.addWidget(self.adresseU1,3,1,1,2)
        self.buttOKU1 = QtGui.QPushButton(hauptdialogU1)
        self.buttOKU1.setGeometry(QtCore.QRect(230,460,75,23))
        font = QtGui.QFont()
        font.setWeight(75)
        font.setBold(True)
        self.buttOKU1.setFont(font)
        self.buttOKU1.setDefault(True)
        self.buttOKU1.setObjectName("buttOKU1")
        self.buttAbbrechenU1 = QtGui.QPushButton(hauptdialogU1)
        self.buttAbbrechenU1.setGeometry(QtCore.QRect(310,460,75,23))
        font = QtGui.QFont()
        font.setWeight(75)
        font.setBold(True)
        self.buttAbbrechenU1.setFont(font)
        self.buttAbbrechenU1.setObjectName("buttAbbrechenU1")
        self.groupBox_2 = QtGui.QGroupBox(hauptdialogU1)
        self.groupBox_2.setGeometry(QtCore.QRect(20,350,361,91))
        self.groupBox_2.setObjectName("groupBox_2")
        self.widget1 = QtGui.QWidget(self.groupBox_2)
        self.widget1.setGeometry(QtCore.QRect(40,20,164,44))
        self.widget1.setObjectName("widget1")
        self.verticalLayout = QtGui.QVBoxLayout(self.widget1)
        self.verticalLayout.setObjectName("verticalLayout")
        self.agbU1 = QtGui.QCheckBox(self.widget1)
        self.agbU1.setObjectName("agbU1")
        self.verticalLayout.addWidget(self.agbU1)
        self.newsletterU1 = QtGui.QCheckBox(self.widget1)
        self.newsletterU1.setObjectName("newsletterU1")
        self.verticalLayout.addWidget(self.newsletterU1)

        self.retranslateUi(hauptdialogU1)
        QtCore.QMetaObject.connectSlotsByName(hauptdialogU1)
        hauptdialogU1.setTabOrder(self.vornameU1,self.nachnameU1)
        hauptdialogU1.setTabOrder(self.nachnameU1,self.geburtsdatumU1)
        hauptdialogU1.setTabOrder(self.geburtsdatumU1,self.adresseU1)
        hauptdialogU1.setTabOrder(self.adresseU1,self.agbU1)
        hauptdialogU1.setTabOrder(self.agbU1,self.newsletterU1)
        hauptdialogU1.setTabOrder(self.newsletterU1,self.buttOKU1)
        hauptdialogU1.setTabOrder(self.buttOKU1,self.buttAbbrechenU1)

    def retranslateUi(self, hauptdialogU1):
        hauptdialogU1.setWindowTitle(QtGui.QApplication.translate("hauptdialogU1", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
        self.groupBox.setTitle(QtGui.QApplication.translate("hauptdialogU1", "GroupBox", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("hauptdialogU1", "Vorname", None, QtGui.QApplication.UnicodeUTF8))
        self.label_2.setText(QtGui.QApplication.translate("hauptdialogU1", "Nachname", None, QtGui.QApplication.UnicodeUTF8))
        self.label_3.setText(QtGui.QApplication.translate("hauptdialogU1", "Geburtsdatum", None, QtGui.QApplication.UnicodeUTF8))
        self.label_4.setText(QtGui.QApplication.translate("hauptdialogU1", "Adresse", None, QtGui.QApplication.UnicodeUTF8))
        self.buttOKU1.setText(QtGui.QApplication.translate("hauptdialogU1", "OK", None, QtGui.QApplication.UnicodeUTF8))
        self.buttAbbrechenU1.setText(QtGui.QApplication.translate("hauptdialogU1", "Abbrechen", None, QtGui.QApplication.UnicodeUTF8))
        self.groupBox_2.setTitle(QtGui.QApplication.translate("hauptdialogU1", "GroupBox", None, QtGui.QApplication.UnicodeUTF8))
        self.agbU1.setText(QtGui.QApplication.translate("hauptdialogU1", "AGBs gelesen und akzeptiert", None, QtGui.QApplication.UnicodeUTF8))
        self.newsletterU1.setText(QtGui.QApplication.translate("hauptdialogU1", "Katalog bestellen", None, QtGui.QApplication.UnicodeUTF8))
Wenn ich die Datei mit dem Befehl Run Module ausführe kommen weder Fehlermeldungen noch Tracebacks. :?
flyingpy
User
Beiträge: 10
Registriert: Donnerstag 10. Juli 2008, 07:39
Wohnort: Wr. Neustadt

Sonntag 13. Juli 2008, 19:41


Möchte noch erwähnen, dass ich die Datei bei meiner Übung hauptdialogU1 nannte und der Name des Formulars hauptdialogU1 ist und dies natürlich in der programmdatei auch berücksichtigt wurde.

Code: Alles auswählen

import sys
from PyQt4 import QtGui
from hauptdialogU1 import Ui_hauptdialogU1 as Dlg

class MeinDialog(QtGui.QDialog, Dlg):    
    def _init_(self):        
        QtGui._init_ (self)
        self.setupUi(self)        

app = QtGui.QApplication(sys.argv)
dialog = MeinDialog()
dialog.show()
sys.exit(app.exec_())
[/b]
Antworten