Checkbutton innerhalb zweitem widget wird nicht richtig dargestellt

Fragen zu Tkinter.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Naja stimmt auch nicht ganz, dass dann nichts mehr komplex wäre. Ich habe eine Maske mit etwa 25 Widgets. Der Code dazu sind über 2000 Zeilen. Das ist ist das Grid Layout.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Brauchbarkeit von GUI Buildern für komplexe Programme.

Dazu wieder dieses Beispiel:

Code: Alles auswählen

from functools import partial
from tkinter import IntVar
from eventbroker_simple import publish, subscribe
 
def button_frame_init(self):
    self.button_show_checkframe['command'] = lambda: publish('SHOW_CHECK_FRAME',True)
    self.button_hide_checkframe['command'] = lambda: publish('SHOW_CHECK_FRAME',False)
 
#subscribe('MESSAGE_GUI.BUTTON_FRAME_INIT',button_frame_init)
 
def frame_show_hide_init(self):
 
    def show_hide(shall_show):
        self.grid() if shall_show else self.grid_remove()
 
    subscribe('SHOW_CHECK_FRAME',show_hide)
   
    self.checkbutton.variable = IntVar()
    self.checkbutton['variable'] = self.checkbutton.variable
    self.button_setcheck['command'] = partial(self.checkbutton.variable.set,True)
    self.button_clear_check['command'] = partial(self.checkbutton.variable.set,False)
   
subscribe('MESSAGE_GUI.FRAME_SHOW_HIDE_INIT',frame_show_hide_init)
Das was hier steht, hat man normalerweise in der __init__ nach den Widget Definitionen. Es steht nur wegen der GUI Generierung in einem extra File, damit es nicht überschrieben wird,

Wenn man die GUI umbaut ob generiert oder programmiert, geht natürlich die __init__ mit und man kann die GUI daher beliebig umbauen.

Andere GUI Builder bieten auch an, dass man command und event Binding bereits im GUI Builder vornehmen kann. Dadurch erübrigt sich die Funktion button_frame_init.

Aber mit command und event Binding ist es nicht getan, denn frame_show_hide_init ist mehr als bloßes command und event binding. Wenn so ein GUI Builder auch für die Fortsetzung der __init__ einen Aufruf oder ein Signal vorsieht und das Interface für den Zugriff auf die Widgets in Ordnung ist, ist er für komplexe Programme brauchbar.

Wenn aber so ein Aufruf oder Signal fehlt und man deswegen die GUI nachbilden muß, nur um dann dorthin zu gelangen, dann sollte man so einen GUI Builder vergessen.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Es ist aber auch richtig, dass diese Programmteile in extra Files stehen. Denn es geht normalerweise auch um mehr als nur GUI Logik. Normalerweise hat man auch eine Geschäftslogik. Und hier sind dann auch die Interfaces zwischen GUI und Geschäftslogik zu impementieren.
Antworten