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 ?
Grundsätzliche Frage zu Qt
- __blackjack__
- User
- Beiträge: 14319
- 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.
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
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.
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
- __blackjack__
- User
- Beiträge: 14319
- 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
@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.
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.
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).
damit erscheint pro Eintrag eine Leerzeile.
Das ist der Print(rep(db_name))
'Backup'
'information_schema'
'mysql'
'performance_schema'
'phpmyadmin'
'prgdaten'
'test'
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)
'Backup'
'information_schema'
'mysql'
'performance_schema'
'phpmyadmin'
'prgdaten'
'test'
Gruß Manfred
