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: 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.
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: 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
@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
- __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
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...?
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'
'Backup'
'information_schema'
'mysql'
'performance_schema'
'phpmyadmin'
'prgdaten'
'test'
sondern so
'Backup'
'information_schema'
'mysql'
'performance_schema'
'phpmyadmin'
'prgdaten'
'test'
Gruß Manfred
- __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.
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
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.
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
- __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
@StMan:
Gut möglich, dass du dir beim Herumprobieren im Designer etwas unbewusst verstellt hast. Also nicht zwingend direkt am Widget, sondern vielleicht an einem Layout (die können ja auch verschachtelt sein). Auch denkbar wäre eine Änderung am Stylesheet, die dir nicht bewusst ist.
Die genaue Darstellungsform des Fehlers kennen wir ja immer noch nicht, da du kein Snippet davon gezeigt hast. Ich würde an deiner Stelle einfach nochmal sauber neu anfangen mit einer neuen ui-Datei. Die alte Datei kannst du ja als Vorlage und Sicherheitskopie bestehen lassen.
Gut möglich, dass du dir beim Herumprobieren im Designer etwas unbewusst verstellt hast. Also nicht zwingend direkt am Widget, sondern vielleicht an einem Layout (die können ja auch verschachtelt sein). Auch denkbar wäre eine Änderung am Stylesheet, die dir nicht bewusst ist.
Die genaue Darstellungsform des Fehlers kennen wir ja immer noch nicht, da du kein Snippet davon gezeigt hast. Ich würde an deiner Stelle einfach nochmal sauber neu anfangen mit einer neuen ui-Datei. Die alte Datei kannst du ja als Vorlage und Sicherheitskopie bestehen lassen.
