Qt5 GUI Datei .ui in Python unter Debian verwenden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
DL3AD
User
Beiträge: 31
Registriert: Montag 31. August 2015, 19:03

Hallo
habe auf meinem Debian (Buster) Rechner KDevelop und QT Designer installiert.
Nun möchte ich zum Test eine GUI Anwendung erstellen.
Habe mit den QT Designer (ein klasse Programm !) ein Form erstellt mit zwei Eingabefeldern ein Label zur Anzeige und ein Button.
Da soll zum Test eine funktion verdrahten werden die zwei Zahlen addiert wenn man auf den Button klickt.

Ich habe nun eine form.ui Datei. Wie binde ich die in KDevelop ein (oder muss die in .py umgewandelt werden? wenn ja wie?) so dass ich auf die einzelnen Elemente der GUI zugreifen kann ?

Gruß Frank
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@DL3AD: Das hat mit KDevelop nichts zu tun. Wäre auch nicht meine persönliche Wahl um Python-Programme zu schreiben.

Um *.ui-Dateien in Python-Programme einzubinden kann man das `PyQt5.uic`-Modul verwenden. Das hat eine `loadUi()`-Funktion.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DL3AD
User
Beiträge: 31
Registriert: Montag 31. August 2015, 19:03

... wie verwende ich das PyQt5.uic Modul ?
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Naja, man importiert und benutzt dann die genannte Funktion um die *.ui-Datei zur Laufzeit zu laden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DL3AD
User
Beiträge: 31
Registriert: Montag 31. August 2015, 19:03

... wie mache ich das ?
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn die Menschheit doch nur etwas erfunden haette, in das man seine Fragen eingibt, und dann eine Liste von relevanten Antworten ausspuckt - wir koennten *SO* viel weiter sein.

https://www.programcreek.com/python/exa ... uic.loadUi
DL3AD
User
Beiträge: 31
Registriert: Montag 31. August 2015, 19:03

...bevor ich eine Frage stelle habe ich natürlich die Suche bemüht.
Ich bin dabei mich ein eine neue Programmiersprache einzuarbeiten - das bringt es mit sich dass man Fragen hat die beantwortet werden müssen.
Erschwerend kommt nun bei mir dazu dass ich auf free Pascal fixiert bin - so dass ich natürlich alles mit pascal vergleiche.
Hilfreich ist es oft wenn auf eine Frage ein kurzer Code Schnipsel kommt und nicht der verweiß auf die Websuche - so kannte ich es zumindest aus dem Pascal Forum. Ich programiere seit mehr als 30 Jahre und weis dass jede Sprache ihre Eigenarten hat.
Ein Forum verstehe ich als Ort der gegenseitigen Hilfe.
Trotsdem Danke für eure Antworten die leider für mich noch nicht hilfreich waren.

Was versuche ich gerade ?
Ich versuche eine einfache GUI Anwendung zu erzeugen die ich als Musterweg zu verstehen.
D.h. ich erzeuge die GUI im Designer, im einfachsen Fall eine Form (so bezeichnete man es unter Pascal) und erzeuge dann in Pythen eine z.b. main.py in der die Form eingebunden ist. Weitere Funktionalitäten sind dann in weiteren .py Dateien enthalten ind werden dann mit dem Form verbunden (bindings)
Im Netz sin oft überladene Beispiele mit komplizierten konstrukten die das eigentliche Prinzip überdecken.
Da lobe ich mit doch die Programmierprinzipien von Linux.

OK, beste Grüße
Frank
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Woran genau scheiterst du denn?
Wenn du nicht weißt, wie man ein Modul importierst oder einen Funktion daraus aufruft, dann fehlen die Grundlagen. Dann ist es vielleicht einfacher vorher ein weniger komplexes Thema als GUI-Entwicklung anzugehen, bis man sich einigermaßen sicher bewegt. Denn sowohl GUI, insbesondere QT, bringt zusätzliche Eigenheiten mit.

Ein guter Einstiegspunkt ist immer das offizielle Tutorial in der Dokumentation.
DL3AD
User
Beiträge: 31
Registriert: Montag 31. August 2015, 19:03

... import modulname - ist mir schon klar - aber damit ist es ja noch nicht getan
Deswegen hoffte ich auf ein kuzes Code snipsel
habe auch schon einiges an funktionen aus Pascal Projekten nachgebaut incl. serial Port... funktioniert auch alles
Nun brauch ich mal ein funktionierendes Grungerüßt für die GUI
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Solche Beispiele waren in meinem Link durchaus enthalten. Und sie finden (sprich: muss man auch mal suchen) sich auch hier. viewtopic.php?t=47044 Beitrag 5 oder so wenn man hier mal loadUI sucht. Das man das selbst macht, statt Lieferung frei Haus zu verlangen, kenne ICH so 🤷🏼‍♂️
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@DL3AD: Nein, damit ist es nicht getan. Man muss die erwähnte `loadUi()`-Funktion auch noch aufrufen. Da bekommt man ein Widget-Objekt zurück das man im Designer entworfen hat. Damit geht es dann ganz normal weiter als wenn man selbst eine GUI-Klasse als Quelltext geschrieben hätte und daraus dann ein Exemplar erstellt hätte.

Ein funktionierendes Grundgerüst gibt es in den Qt-Tutorials die man im Netz findet. Mehrzahl! Und da sollte man sich von vorne durcharbeiten. Designer und *.ui-Dateien kommen in der Regel in diesen Tutorials nachdem man die Qt-Komponenten und Konzepte als *Code* durchgearbeitet hat. Um zwei Eingabefelder, ein Label, und eine Schaltfläche in einem Layout in einem Fenster anzuzeigen braucht man den Designer nicht, und es ist wichtig die Grundlagen zu verstehen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DL3AD
User
Beiträge: 31
Registriert: Montag 31. August 2015, 19:03

Hallo,
ich danke euch für die Hinweise - so langsam dämmert es :mrgreen:
Ich muss mich an die spezifischen Begrifflichkeiten erst noch gewöhnen um dann zielgenauer suchen zu können.

Gruß Frank
DL3AD
User
Beiträge: 31
Registriert: Montag 31. August 2015, 19:03

Hallo,
habe es nun zum laufen bekommen - das Form wird ordnungsgemäß angezeigt.
Nun kann ich aber nicht auf die Objekte und methoden des Form zugreifen um Anbindungen zu machen :shock:
Wenn ich zuvor die .ui umwandle mit "pyuic5 form1.ui -o form1.py" und mit import einbinde dann ist alles da.
Gibt es da eine Möglichkeit bei der on the fly Variante das man auf die Objekte in der .ui zugreifen kann ?

Gruß Frank
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Ja gibt es. Das ist auch normal.
Offensichtlich machst du bei beiden Varianten etwas unterschiedlich. Was genau kann man natürlich ohne Code nicht sagen.
DL3AD
User
Beiträge: 31
Registriert: Montag 31. August 2015, 19:03

... hier mal das Testprog

Code: Alles auswählen

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
import TestTools

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        loadUi("form1.ui", self)
        self.Btn_Calc.clicked.connect(TestTools.my_hallo)

def main():
    app= QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und ohne UI Datei und fehlender Fehlermeldung sollen wir jetzt was genau damit machen?
DL3AD
User
Beiträge: 31
Registriert: Montag 31. August 2015, 19:03

... ich schrieb doch dass das Prog läuft - aber ich kann beim programmieren nicht auf die Objekte zugreifen.
d.h. wenn ich eine Punkt setze dann wird mir nix an Vorschau zur Auswahl gegeben weil ja die .ui erst zur laufzeit übersetzt wird.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich weiss nicht was du mit "eine Punkt setze" meinst, aber wenn das Programm laeuft, dann laeuft auch die Zeile

self.Btn_Calc.clicked.connect(TestTools.my_hallo)

und damit auch der Zugriff auf einen Btn_Calc, den du in form1.ui deklariert haben musst. Womit deine Frage durch dich selbst beantwortet wurde. Denn das ist ja nunmal der Zugriff auf ein im Designer definiertes Element.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast also gar kein Problem, sondern nur einen Editor, der nicht ganz so schlau sein kann, wie Du gerne hättest. Also verabschiede Dich von einem alleswissenden Editor.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ahhhhh, *das* war damit gemeint. Sorry, hab' ich verrallt. Das geht nicht. Sagt Sirius3 ja auch schon.
Antworten