Grundsätzliche Frage zu Qt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
StMan
User
Beiträge: 40
Registriert: Sonntag 11. Januar 2026, 17:48

Hallo zusammen,
ich habe meine ersten Anfänger Versuche mit pyside6-designer gemacht, und habe ein Fenster mit Buttons, Entrys usw. erstellt. Dann die .ui in .py convertiert. Soweit OK. Nun habe ich gelesen man sollte in der convertierten nichts ändern, also habe ich sie in mein main importiert.
Nun die Fragen:
Muß ich die ganzen Classen die in der convertierten .py stehen auch in meinem main importieren?
Wie kann ich z.B. in meinem main die FontFarbe FrameFarbe ändern ?
Gruß Manfred
Benutzeravatar
__blackjack__
User
Beiträge: 14322
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@StMan: Ich würde da nichts in Quelltext umwandeln, sondern die *.ui-Datei zur Laufzeit in das Programm laden. Bei PySide nimmt man dafür einen `QUiLoader`.

Man kann keine Klassen importieren, nur Module. Wenn Du ein Modul importierst wird der komplette Inhalt des Moduls ausgeführt. Man kann nicht selektiv nur Teile von dem Code auf Modulebene ausführen lassen.

Um was an den GUI-Objekten zu ändern, musst Du das entsprechende Objekt in die Finger bekommen, und dann die entsprechenden Methoden verwenden. Wenn es nicht das Widget ist was die anderen Widgets enthält, denn das bekommt man ja problemlos in die Finger, kann man beispielsweise die `findChild()` oder `findChildren()` Methoden von `QObject` verwenden um Widgets über den Namen zu finden, den man im Designer vergeben hat.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Benutzeravatar
StMan
User
Beiträge: 40
Registriert: Sonntag 11. Januar 2026, 17:48

ich habe nun die .ui in mein main nach vielen Fehlversuchen eingebunden, und es funktioniert soweit auch.
Nun habe ich ein Problem das ich nicht lösen kann. Wenn ich Daten in eine QListWidget einlese, habe ich nach jedem Eintrag eine Leerzeile die ich nicht weg bekomme.
Die gleichen Daten bei tk.listbox machten keine Probleme.
Gruß Manfred
Benutzeravatar
__blackjack__
User
Beiträge: 14322
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wohl eher _in_ jedem Eintrag, weil da ziemlich wahrscheinlich ein Zeilenende-Zeichen am Ende jeder Zeile ist. Wobei das auch bei Tk ”probleme” macht, denn dort führt das zwar nicht zu einer neuen Zeile, aber es wird als schwarzes Kästchen nach dem Text im Eintrag angezeigt.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Benutzeravatar
snafu
User
Beiträge: 6945
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@StMan:
Beim zeilenweisen Einlesen bleiben die Newline-Zeichen erhalten. Du kannst das lösen, indem du für jede Zeile die Methode strip() aufrufst. Normalerweise hätte ich rstrip() empfohlen, um möglicherweise gewollten Whitespace am Zeilenanfang zu beizubehalten. Aber da es Listeneinträge sind, dürfte strip() hier besser passen.
Benutzeravatar
StMan
User
Beiträge: 40
Registriert: Sonntag 11. Januar 2026, 17:48

@snafu strip() habe ich probiert, nützt aber nichts.
Gruß Manfred
Benutzeravatar
snafu
User
Beiträge: 6945
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ein "funktioniert nicht" trägt leider nur sehr bedingt zur Lösungsfindung bei. Könntest du den Vorgang des Einlesens und Hinzufügen zum Widget auf ein Minimum herunterbrechen (also so damit das Problem dort tatsächlich noch auftritt) und diesen dann zur Ursachenforschung bitte hier reinstellen? Hilfreich wäre auch ein eingefügtes ``print(eintrag)``, damit man sieht, ob die Leerzeilen auch bei der Ausgabe auf der Kommandozeile mit angezeigt werden. ``print(repr(eintrag))`` ginge auch, damit man sozusagen die Rohform des Strings sehen kann ("repr" = "representation", quasi eine Ausgabe zum Debuggen).
Benutzeravatar
StMan
User
Beiträge: 40
Registriert: Sonntag 11. Januar 2026, 17:48

damit erscheint pro Eintrag eine Leerzeile.

Code: Alles auswählen

 if self.connection.is_connected():
                self.update_status(f"Verbunden mit Localhost", col=1)
                cursor = self.connection.cursor()
                cursor.execute("SHOW DATABASES")               
                self.ui.DBView.clear()                 
                # 1.Checkbox überprüfen
                if self.ui.checkBox.isChecked():
                    system_dbs = set() # Leere Menge -> alle DBs werden angezeigt
                    self.update_status(f"Alle Datenbanken werden angezeigt", col=1)  
                else:
                    system_dbs = self.system_db_list 
                    self.update_status(f"Nur eigene Datenbanken werden angezeigt", col=1)  
                for (db_name,) in cursor:
                    db_name = db_name.strip()  # Entfernt \n, \r und Leerzeichen am Ende
                    if db_name not in system_dbs:   # Filter greift nur, wenn system_dbs nicht leer ist
                        self.ui.DBView.addItem(db_name) 
Das ist der Print(rep(db_name))
'Backup'
'information_schema'
'mysql'
'performance_schema'
'phpmyadmin'
'prgdaten'
'test'
Gruß Manfred
Benutzeravatar
StMan
User
Beiträge: 40
Registriert: Sonntag 11. Januar 2026, 17:48

ich kann auch nicht den Menüeintrag "Beenden" aktivieren. Habe actionBeenden triggered() eingestellt.
Gruß Manfred
Benutzeravatar
__blackjack__
User
Beiträge: 14322
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@StMan: Da kann man sich das `strip()` sparen. Die Datenbanknamen kommen ja aus einer Datenbank und nicht aus einer Textdatei. Du hattest „einlesen“ geschrieben, da habe ich an eine Datei und nicht an eine Datenbank gedacht.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Benutzeravatar
snafu
User
Beiträge: 6945
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sind die leeren Zeilen denn eigene Einträge (also Einträge ohne Text) oder ist die leere Zeile jeweils Teil des Eintrags? Vielleicht kannst du mal einen Screenshot machen, wo ein Eintrag markiert ist, damit man sieht, was du meinst...?
Benutzeravatar
StMan
User
Beiträge: 40
Registriert: Sonntag 11. Januar 2026, 17:48

ma im QListWidget sieht es nicht so aus
'Backup'
'information_schema'
'mysql'
'performance_schema'
'phpmyadmin'
'prgdaten'
'test'

sondern so

'Backup'

'information_schema'

'mysql'

'performance_schema'

'phpmyadmin'

'prgdaten'

'test'
Gruß Manfred
Benutzeravatar
__blackjack__
User
Beiträge: 14322
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@StMan: Das ist im Grunde klar, die Frage ist wie das grafisch aussieht, insbesondere mit einem ausgewählten Eintrag, damit man optisch sieht, was tatsächlich dazu gehört.

Was hast Du im Designer denn alles geändert was von den Standardeinstellungen abweicht? Das sieht man daran, dass die Eigenschaft in „bold“ dargestellt wird. Mit dem kleinen Button am Ende wenn man eine Eigenschaft angeklickt hat, kann man die Eigenschaft wieder auf den Standardwert zurück stellen.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Benutzeravatar
snafu
User
Beiträge: 6945
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Meine Empfehlung wäre ja, das Befüllen nochmal mit einem "frischen" List Widget mit Standardeinstellungen zu probieren. Dann hat man einen Vergleich, ob es durch das Layout bedingt ist.
Benutzeravatar
StMan
User
Beiträge: 40
Registriert: Sonntag 11. Januar 2026, 17:48

außer font = bold habe ich nichts verändert.
wenn ich einen Entrag auswähle, ist vor dem Wort eine blaue senkrechte Linie, und die ganze Zeile wird grau.
Ich habe das ganze auch in Python manuel gemacht, da ist alles OK.
Gruß Manfred
Benutzeravatar
__blackjack__
User
Beiträge: 14322
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das wird ja immer merkwürdiger. In der `*.ui`-Datei ist bei dem `QListWidget` wirklich nur ein <property> mit dem Namen "font"? Sonst nichts weiter?
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten