Sirius3 hat geschrieben:@Alfons Mittelmeyer:Und die general-grid-definition ist auch nur eine Erfindung (Funktion) von Dir. Im Normalfall dürfte es also keine zwei Spalten mit den selben Werten geben und wenn, dann würde man das direkt mit einer Schleife setzen, weil es kann ja gut sein, dass Spalten 0 bis 7 schmal und Spalten 8 bis 15 breit sind. Da ist also **ein** Defaultwert nur für die Hälfte gut.
Das Problem hat sich erledigt, denn ich habe jetzt die passende Lösung gefunden.
- das Programm arbeitet bis auf eine Kleinigkeit wie bisher. Ist eine grid Layout Definition bereits da, interessiert diese Liste von Tupeln, aus der man sie auch noch gewinnen kann, nicht mehr.
- das heißt, was bei der Grid Layout Bearbeitung im GuiDesigner noch mit dieser Liste von Tupeln geschieht, ist ohne Belang
- das Abschneiden von Trailing (0,0,0) ist unnötig und wäre ein Fehler
- Grid Layout Definitiion entstand bisher beim Editieren des Grid Layouts im GuiDesigner und beim Laden von DynTkInter Gui Scripten
- nur falls noch keine Grid Layout Definition (aus anderen Quellen) da ist, wird gegebenenfalls eine durch rowconfigure oder columnconfigure definierte erzeugt
Den Algorithmus habe ich geändert. Es existiert nun neben dieser Liste von Tupeln noch ein Dictionary. Das Dictionary enthält auch Eintgräge, die aus rowconfigure und columnconfigure erzeugt wurden, Aber dabei handelt es sich nicht um den augenblicklichen Zustand, sondern um die Information für welche Spalten oder Zeilen entsprechende configures angewandt wurden, etwa:
{ (75,0,1) : { 1,2,3,4,5 } , ... }
Nur wenn man die gleiche Grid Layout Definition über alle Zeilen oder Spalten angewandt hat, unabhängig vom Endzustand, ist damit dann eine generelles Grid Layout definiert. Definiert ist ein solches immer, nur andernfalls ist es (0,0,0). Auch bei nur einer Zeile oder Spalte gilt als generelles Grid Layout (0,0,0)
Ein generelles Grid Layout von (0,0,0) braucht man nicht zu exportieren, denn (0,0,0) ist es von selber.
Auch braucht man dafür nichts zu implementieren, dass keine (0,0,0) configure Definitionen geschrieben werden, denn nur vom generellen Grid Layout abweichende Definitionen werden geschrieben. Eine Ausnahme dabei ist allerdings eine (0,0,0) Definition am Ende. Ist eine solche vorhanden, wird sie geschrieben. Schließlich definiert sie ja die Breite oder Länge des Grid Layouts. Für das Programm spielt es keine Rolle, aber wenn man im GuDesigner eine Grid Tabelle mit soundsoviel Zeilen oder Spalten definiert hat, soll man sie nachher beim Nacheditieren auch wieder so bekommen.
Meine Lösung sieht jetzt so aus:
Code: Alles auswählen
def get_grid_multilist(iterable,most_used,keys):
return [ [item != most_used, dict(zip(keys, item))] for item in iterable ]
def most_of(how_many):
count = 0
element = None
for key,value in how_many.items():
if len(value) > count:
count = len(value)
element = key
return element,count
def get_gridconfig(iterable,how_many):
if not iterable:
return None,[]
if len(iterable) == 1:
most_used = (0,0,0)
else:
most_used,count = most_of(how_many)
if count < len(iterable):
most_used = (0,0,0)
config = get_grid_multilist(iterable,most_used,('minsize','pad','weight'))
general = [len(iterable)]
general.extend(most_used)
return tuple(general),config
Und aus:
Code: Alles auswählen
# general grid definition ==============================
grid_general_rows(self,4, minsize = 0, pad = 0, weight = 0)
grid_general_cols(self,4, minsize = 0, pad = 0, weight = 0)
# individual grid definition ===========================
self.rowconfigure(0,minsize=15, weight=1, pad=0)
self.columnconfigure(0,minsize=15, weight=1, pad=0)
wird:
Code: Alles auswählen
# individual grid definition ===========================
self.rowconfigure(0,weight=1, minsize=15, pad=0)
self.rowconfigure(3,weight=0, minsize=0, pad=0)
self.columnconfigure(0,weight=1, minsize=15, pad=0)
self.columnconfigure(3,weight=0, minsize=0, pad=0)
Gute Lösung?
PS: Im Normalfall dürfe es keine Zwei Spalten under Reihen mit denselben Werten geben? Doch das habe ich hier vor Kurzem in dieser Art gesehen: