Attribut von Modul wird nicht gefunden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Hallo Ihr,

leider komme ich nicht drauf, warum sich Python aus meinem Programm stets mit der Meldung:
ui = testdialog.Ui_DialogTesting()
AttributeError: 'module' object has no attribute 'Ui_DialogTesting'
verabschiedet.

Dem ganzen liegt folgender Code zu Grunde:

Im aufrufenden Modul:

Code: Alles auswählen

def main():

 
    import testdialog

    
    app = QtGui.QApplication(sys.argv)
    window = QtGui.QDialog()
    ui = testdialog.Ui_DialogTesting()
das aufgerufene Modul (testdialog) sieht so aus:

Code: Alles auswählen

class Ui_DialogTesting(object):
	def setupUi(self, DialogTesting):
		DialogTesting.setObjectName("DialogTesting")
Wenn Ihr eine idee habt, immer her damit. Vielen Dank!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was sagt denn ein

Code: Alles auswählen

dir(testdialog)
?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Hallo,

falls das Problem nach einem Neustart Deines Rechners immer noch auftritt, geh mal in das entsprechende Verzeichnis wo Dein "testdialog" Modul liegt, und lösche die dazugehörige "testdialog.pyc" Datei.

:!: Wohl gemerkt: nur die .pyc, nicht die .py selber.

>>Masaru<<
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Zunächsteinmal vielen Dank!

dir() hatte ich glatt vergessen.

Wenn ich die *.pyc loesche und folgendes ausführe:

Code: Alles auswählen

import testdialog
print(dir(testdialog))

Werden die dort vermuteten Attribute auch erkannt (mich interessiert ja in erster Linie Ui_DialogTesting):
['QtCore', 'QtGui', 'Ui_DialogTesting', '__builtins__', '__doc__', '__file__', '__name__', '__package__']
Die *.pyc, die dann erstellt wird, ist 2KB groß.

Führe ich aber (nach Löschen der *.pyc) den im Eingangsposting zitierten Codeblock aus, erhalte ich nach wie vor die gleiche Fehlermeldung.

Lösche ich die *.pyc und führe diesen Codeblock aus, ist die *.pyc nur 1KB groß und ein dir() zeigt mit das gesuchte Attribut auch nicht an.

Jetzt bin ich ein wenig verwirrt....
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Ich tippe mal ganz stark, Du hast irgendwo noch eine zweite "testdialog.py" Datei rumliegen, die vorranging hinsichtlich der Importierungs-Reihenfolge ist ;).

Suche mal sowohl in Deinem Python-Installations- als auch Projekt-Verzeichnis (wo Deine Modul-Dateien liegen) nach einer "testdialog.py".

>>Masaru<<
Benutzeravatar
snafu
User
Beiträge: 6862
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Offensichtlich ist das importierte `testdialog` nicht das, was du erwartest. Gibt es zwei Dateien mit diesem Namen? Hast du die aktuelle Version nicht gespeichert? Was sagt ein `reload(testdialog)`?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Was sagt ein testdialog.__file__ ?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Dank Eurer Hilfe konnte ich das Problem eingrenzen. "testdialog.py" wird dynamisch von pyQt erzeugt und da leigt der Hund begraben.

Wenn ich die Datei erzeugen lasse, dann die *.pyc.lösche und danach den Codeblock von oben ausführe, funktioniert es.

Ergo irgendwas hakt beim PyQt und da muss ich wohl nochmal ran. Danke für die Tips.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wie erzeugst Du denn die GUI? Per pyuic? Oder lädst Du sie dynamisch?
Antworten