Schönen guten Tag liebes Forum,
Ich bin neu in der programmierung und bin momentan an einem Punkt an dem Ich nicht weiter komme und eure hilfe benötige.
Ich weiß nicht wie wichtig das ist jedoch mache ich mal vorsichtshalber folgende Angaben: Win10 und dort benutze Ich als Enwicklungsumgebung Visual Studio / Python 3.6.
ICh habe mir nun mehrfach verschiedene Videos zur Instalation von Qt angeschaut aber bekomme es leider nicht zum laufen.
ICh habe Qt installiert und pyQt5 ebenfalls in meiner Umgebung zum laufen gebracht.
ICh habe nun folgenden Test Code benutzt:
import sys
from PyQt5 import QtWidgets,uic
class MeinDialog(QtWidgets.QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = uic.loadUi("hauptdialog.ui",self)
app = QtWidgets.QApplication(sys.argv)
dialog = MeinDialog()
dialog.show()
sys.exit(app.exec_())
_____________________________________________________________
das importieren von PyQt5 funktionier jedoch sagt mir die Umgebung jedesmal das er die Datei "hauptdialog.ui" nicht findet ,deshalb funktioniert logischerweise das öffnen der erzeugt GUi nicht.Wenn ich debugge und über uic mit der Maus gehe sehe ich in welchem Pfad er danach guckt dort befindet sich die Datei ich bin mit meinem Wissen am ende ich hoffe ihr könnt mir weiterhelfen.
Mit freundlichen Grüßen:
Marcel
Installation von QT klappt nicht
Bitte in Zukunft die code-tags verwenden. Dazu im vollstaendigen Editor den </>-Knopf bemuehen.
Und was genau hat denn uic mit hauptdialog.ui zu tun? Ersteres ist ein Modul, und da solltest du auf keinen Fall etwas hinlegen! Das hat der Installer alles angelegt, und da hat dein Code nichts suchen.
Der Pfad den du angibst ist ein relativer. Damit haengt es dann davon ab, wo das Arbeitsverzeichnis ist. Statt sich darauf zu verlassen, dass das schon passt, baut man sich lieber einen absoluten Pfad zusammen. Dazu benutzt man die Variable __file__, die auf das aktuelle Modul zeigt. Und dann noch das pathlib-Modul zB.
Zum Test kannst du aber auch erstmal den vollen Pfad auf die .ui-Datei angeben. Das sollte dann funktionieren.
Und was genau hat denn uic mit hauptdialog.ui zu tun? Ersteres ist ein Modul, und da solltest du auf keinen Fall etwas hinlegen! Das hat der Installer alles angelegt, und da hat dein Code nichts suchen.
Der Pfad den du angibst ist ein relativer. Damit haengt es dann davon ab, wo das Arbeitsverzeichnis ist. Statt sich darauf zu verlassen, dass das schon passt, baut man sich lieber einen absoluten Pfad zusammen. Dazu benutzt man die Variable __file__, die auf das aktuelle Modul zeigt. Und dann noch das pathlib-Modul zB.
Zum Test kannst du aber auch erstmal den vollen Pfad auf die .ui-Datei angeben. Das sollte dann funktionieren.
- __blackjack__
- User
- Beiträge: 14005
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Bl3nder: Die Datei "hauptdialog.ui" muss sich im aktuellen Arbeitsverzeichnis befinden. Das überhaupt nichts damit zu tun wo das `uic`-Modul gespeichert ist. *Dort* sollte auch auf keinen Fall eine *.ui-Datei abgelegt werden.
Entweder gibst Du einen absoluten Pfad für die *.ui-Datei an, oder legst die Datei in einen Pfad zu dem man relativ zum Modul einen Pfad zur Laufzeit erstellen/ermitteln kann. Der Pfad zu einem Modul ist über den Namen `__file__` in Python-Modulen ermittelbar. Zum Beispiel mit Hilfe des `pathlib`-Moduls so:
Anmerkung: Bei `uic.loadUi()` solltest Du entweder das `self` als zweites Argument weg lassen, oder das Ergebnis der Funktion nicht an das Attribut `ui` binden. Entweder oder. Beides macht wenig Sinn und ist verwirrend.
Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Edit:
Entweder gibst Du einen absoluten Pfad für die *.ui-Datei an, oder legst die Datei in einen Pfad zu dem man relativ zum Modul einen Pfad zur Laufzeit erstellen/ermitteln kann. Der Pfad zu einem Modul ist über den Namen `__file__` in Python-Modulen ermittelbar. Zum Beispiel mit Hilfe des `pathlib`-Moduls so:
Code: Alles auswählen
from pathlib import Path
SELF_PATH = Path(__file__).absolute().parent
Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Edit:
Code: Alles auswählen
#!/usr/bin/env python3
import sys
from pathlib import Path
from PyQt5 import QtWidgets, uic
SELF_PATH = Path(__file__).absolute().parent
class MeinDialog(QtWidgets.QDialog):
def __init__(self, parent=None):
super().__init__(parent)
uic.loadUi(SELF_PATH / "hauptdialog.ui", self)
def main():
app = QtWidgets.QApplication(sys.argv)
dialog = MeinDialog()
dialog.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Ich bedanke mich erstmal für die schnellen Antworten,
Ich habe leider noch sehr wenig Erfahrung und habe nur das Buch als quasi Leitfanden genommen und dort wo es so gemacht jedoch bin ich offen und dankbar für die oben gennanten Tipp/ Anmerkung.
Ich deinstalliere nochmal alles und installiere nochmal alles vernünftig und probiere es dann wie von euch oben Beschrieben aus und melde mich dann nochmal.
ICh danke euch schon mal für eure Hilfe
Mit freundlichen Grüßen
Bl3nder
Ich habe leider noch sehr wenig Erfahrung und habe nur das Buch als quasi Leitfanden genommen und dort wo es so gemacht jedoch bin ich offen und dankbar für die oben gennanten Tipp/ Anmerkung.
Ich deinstalliere nochmal alles und installiere nochmal alles vernünftig und probiere es dann wie von euch oben Beschrieben aus und melde mich dann nochmal.
ICh danke euch schon mal für eure Hilfe
Mit freundlichen Grüßen
Bl3nder
Eine Vision ohne Aktion bleibe eine Illusion