Hallo, folgendes Problem:
ich finde im Web keinen gültigen Code, mit dem sich ein mit dem Qt Designer erstelltes "*.ui"-File direkt in den Python-Code einbinden lässt. (Win 7, Python 3.4, PyQT 5.3.1) So ziemlich alles was ich finde bezieht sich auf PyQt4, und liefert mir dann in der Regel den folgenden Fehler: IndentationError: unexpected indent
Fürs erste mal ein winziger, und sehr geläufiger, Versuchsaufbau:
Ein QT-Widget (widgHalloWelt.ui) mit einem PushButton und einem Label ohne Text. Wenn man den PushButton betätigt, soll im Label "Hallo Welt" erscheinen. Wie müsste der Code aussehen, um dieses Widget einzubinden? Und wie fange ich den Click-Event des Pushbuttons ab, und verwende ihn dazu, die Text-Eigenschaft des Labels zu ändern?
Hilfe wär lieb :)
LG SG ;-)
PyQt5: Erste Schritte / Einbinden von Forms / Widgets
Der Fehler liegt auf deiner Seite, da ist die Fehlermeldung eigentlich eindeutig. Du hast deinen Code falsch eingerückt.
Es ist übrigens sehr hilfreich, wenn du die komplette Fehlermelung, inklusive Traceback und den betroffenen Code hier zeigst. Deine textuelle Zusammenfassung ist sicher gut gemeint, aber mit Fehler und Code kann man dir besser helfen. Dann muss man nicht raten.
Es ist übrigens sehr hilfreich, wenn du die komplette Fehlermelung, inklusive Traceback und den betroffenen Code hier zeigst. Deine textuelle Zusammenfassung ist sicher gut gemeint, aber mit Fehler und Code kann man dir besser helfen. Dann muss man nicht raten.
Das Leben ist wie ein Tennisball.
Hallo EyDu,
also das mit den Einrückungen hat mich schon ein kleines Stück weitergebracht (Bin halt blutiger Python-Anfänger^^) Aber so ganz funktionierts noch nicht:
Und das Traceback:
Traceback (most recent call last):
File "C:/...QtHalloWelt.py", line 4, in <module>
class MainWindow(QtGui.formHalloWelt):
AttributeError: 'module' object has no attribute 'formHalloWelt'
Process finished with exit code 1
Hm, das heisst wohl, dass ich das Argument von "MainWindow" noch nicht so recht verstanden habe. Was muss denn da rein, wenn nicht der Name des Widgets?
LG SG ;-)
also das mit den Einrückungen hat mich schon ein kleines Stück weitergebracht (Bin halt blutiger Python-Anfänger^^) Aber so ganz funktionierts noch nicht:
Code: Alles auswählen
import sys
from PyQt5 import QtGui, uic
class MainWindow(QtGui.formHalloWelt):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
uic.loadUi(widgHalloWelt.ui, self)
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
Traceback (most recent call last):
File "C:/...QtHalloWelt.py", line 4, in <module>
class MainWindow(QtGui.formHalloWelt):
AttributeError: 'module' object has no attribute 'formHalloWelt'
Process finished with exit code 1
Hm, das heisst wohl, dass ich das Argument von "MainWindow" noch nicht so recht verstanden habe. Was muss denn da rein, wenn nicht der Name des Widgets?
LG SG ;-)
Me.PEBKAC ^^
@SG
: `MainWindow` hat kein Argument. In die Klammern gehört eine Basisklasse. Und bei Dir steht da `QtGui.formHalloWelt`, also das `QtGui`-Modul aus dem `PyQt5`-Package. Und das hat ganz sicher kein Attribut `formHalloWelt`. Ich vermute mal Dein `MainWindow` soll von `QtGui.QMainWindow` erben.
Und beim `loadUi()`-Aufruf möchtest Du vieleicht einen Dateinamen als Zeichenkette angeben. Denn sonst fliegt Dir dort ein `NameError` um die Ohren weil der Name `widgHalloWelt` nirgends definiert wurde.
Der Rest des Programms ist dann immer noch falsch eingerückt, beziehungsweise fehlt da vielleich eine Funktionsdefinition in der das Hauptprogramm dann steht.

Und beim `loadUi()`-Aufruf möchtest Du vieleicht einen Dateinamen als Zeichenkette angeben. Denn sonst fliegt Dir dort ein `NameError` um die Ohren weil der Name `widgHalloWelt` nirgends definiert wurde.
Der Rest des Programms ist dann immer noch falsch eingerückt, beziehungsweise fehlt da vielleich eine Funktionsdefinition in der das Hauptprogramm dann steht.
@BlackJack
Ah ok.
Ich dachte, ich müsste in Zeile 4 den Objektnamen angeben, statt dessen muss ich von der Klasse "Widgets" erben. (QMainWindow funktioniert da nicht, weil, wie gesagt, ein Widget) Ich nehme an, es muss richtig dann "QWindow" heißen, jedenfalls liefert das keinen Fehler.
Beim `loadUi()`-Aufruf hatte ich den Text einfach aus einem Thread hier kopiert, aber klar, da müssen Anführungszeichen hin.
Code geändert wie folgt:
Aber es fehlert weiterhin:
Traceback (most recent call last):
File "C:/...QtHalloWelt.py", line 9, in <module>
app = QtGui.QApplication(sys.argv)
AttributeError: 'module' object has no attribute 'QApplication'
Process finished with exit code 1
Ah ok.
Ich dachte, ich müsste in Zeile 4 den Objektnamen angeben, statt dessen muss ich von der Klasse "Widgets" erben. (QMainWindow funktioniert da nicht, weil, wie gesagt, ein Widget) Ich nehme an, es muss richtig dann "QWindow" heißen, jedenfalls liefert das keinen Fehler.
Beim `loadUi()`-Aufruf hatte ich den Text einfach aus einem Thread hier kopiert, aber klar, da müssen Anführungszeichen hin.
Code geändert wie folgt:
Code: Alles auswählen
import sys
from PyQt5 import QtGui, uic
class MainWindow(QtGui.QWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
uic.loadUi("widgHalloWelt.ui", self)
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
Traceback (most recent call last):
File "C:/...QtHalloWelt.py", line 9, in <module>
app = QtGui.QApplication(sys.argv)
AttributeError: 'module' object has no attribute 'QApplication'
Process finished with exit code 1
Me.PEBKAC ^^
Die Fehlermeldung sagt eigentlich was los ist. Wirf doch einfach mal die Suchmaschine deiner Wahl mit den Suchbegriffen "PyQt5 QApplication" an, dann findest du deinen Fehler selbst.
Das Leben ist wie ein Tennisball.
- Madmartigan
- User
- Beiträge: 200
- Registriert: Donnerstag 18. Juli 2013, 07:59
- Wohnort: Berlin
QApplication gehört seit Qt5 nicht mehr zu QtGui, sondern ist unter QtWidgets zu finden. Auch gibt es da mittlerweile einen Unterschied zwischen QApplication und QGuiApplication.SG ;-) hat geschrieben: Traceback (most recent call last):
File "C:/...QtHalloWelt.py", line 9, in <module>
app = QtGui.QApplication(sys.argv)
AttributeError: 'module' object has no attribute 'QApplication'
http://qt-project.org/doc/qt-5/qguiappl ... ml#details
http://qt-project.org/doc/qt-5/qapplica ... ml#details
@Ene Uran: Ach tut man das? Warum ist Windows so unterschiedlich zu DOS? Warum Windows 8 so unterschiedlich zu Windows 7? Warum Python 3 so unterschiedlich zu Python 2? Warum Qt4 so unterschiedlich zu Qt3? Was soll diese ständige Weiterentwicklung…
Ernsthaft‽
