ich dachte mir, ich gucke mal in Python und GTK3 rein und teste,, ob dass eine gute Alternative für mich ist - stehe daher noch am Anfang.
Um mir das Herumgehühner mit bsp. einer scrollbaren GtkListbox zu ersparen (box'en, Row's und darin Labels erstellen), habe ich mir eine Klasse erstellt, mit der es einfacher läuft eine simple Listbox zu erstellen und zu verwlten.
Aufgabe ist, dass die einfache Listbox- Klasse eine Liste in einem GtkScrolledWindow erstellt und man leicht Row's hinzufügen, entfernen, bearbeiten kann...
Das funktioniert auch.
Problem ist, wenn ich ein Signal an einen im Hauptfenster befindlichen Butten erstelle und über dessen 'clicked'- Signal bsp. ein Row hinzufügen möchte.
Die entsprechende callback wird ausgeführt und die AddItem- Funktion der Listen- Klasse wird auch ausgeführt, Row wird dort erstellt und auch der Liste hinzugefügt - aber nicht angezeigt.
In den letzten beiden Zeilen der Fensterklasse habe ich die AddItem- Funktion einmal direkt ausgeführt und einmal die callback manuell angesprochen - beides funktioniert.
Hier der Code:
Code: Alles auswählen
import gi
gi.require_version('Gtk','3.0')
from gi.repository import Gtk, GLib
from gi.repository import Gdk
class MyList(Gtk.ScrolledWindow):
def __init__(self) -> None:
super().__init__()
self.lst = Gtk.ListBox()
self.add(self.lst)
def AddItem(self, Text:str):
Row = Gtk.ListBoxRow()
lbl = Gtk.Label(label = Text, halign = Gtk.Align.START)
Row.add(lbl)
self.lst.add(Row)
print(self.lst)
print(Text)
ItemCount = 0
for i in self.lst:
ItemCount += 1
print('Neuer Count: ', ItemCount)
class MyWindow(Gtk.Window):
def __init__(self):
super().__init__(title = "Mein Fenster")
self.vBox = Gtk.Box(orientation = Gtk.Orientation.HORIZONTAL)
self.Bef1 = Gtk.Button(label = 'Test')
self.lstKlienten = MyList()
self.vBox.pack_start(self.lstKlienten, True, True, 0)
self.vBox.pack_start(self.Bef1, True, True,0)
self.Bef1.connect('clicked', self.bef1_onClick)
self.add(self.vBox)
self.lstKlienten.AddItem("Sascha")
self.bef1_onClick(0)
def bef1_onClick(self, gadget):
self.lstKlienten.AddItem('Thomas')
FrmMain = MyWindow()
FrmMain.show_all()
Gtk.main()
Kann mir da jemand einen Hinweis geben, wie ich das Problem lösen kann?
Vielen Dank
Pysa