GUI Designer mit Source File update?
Verfasst: Dienstag 13. Oktober 2015, 13:22
Ein Export nach tk sieht so aus:Was mit tk allein nicht geht habe ich mal auskommentiert.
Für Container Widgets, die andere Widgets enthalten, wird hierbei jeweils eine Klasse erzeugt.
Das Problem ist nun, wie kann man die GUI nachbearbeiten und die geänderte GUI dann wieder in das Source File übernehmen?
Bei den GUI Scripts speichere ich mir die markierten Code Teile in den Container Widgets und kann dann Widgets und Code zusammen abspeichern.
Das geht aber bei den exportierten Files nicht.
Aber mir ist da eine andere Lösung eingefallen. Beim Abspeichern könnte man in bereits vorhandenern Source Files den Beginn der Klassendefinitionen ersetzen.
Dabei wird ein Sourcefile gelesen, bis eine Klassendefinition auftaucht. Wenn es sich um eine Klasse handelt, die auch in der GUI definiert ist, dann wird der Teil bis nach erster Leerzeile nach def __init__ einfach ausgetauscht. Wenn etwas Neues hinzugekommen ist, dann wird dieser Rest vor 'mainloop(' eingefügt.
Gute Idee?
Code: Alles auswählen
import tkinter as tk
#import DynTkExtend as ext
class Application(tk.Tk):
def __init__(self,**kwargs):
tk.Tk.__init__(self,**kwargs)
self.button_frame = ButtonFrame(self,**{'text': 'Buttons'})
#ext.grid_table(self.button_frame,**{'grid_rows': '(6, 25, 0, 0)', 'grid_cols': '(1, 75, 0, 0)'})
self.button_frame.pack()
class ButtonFrame(tk.LabelFrame):
def __init__(self,master,**kwargs):
tk.LabelFrame.__init__(self,master,**kwargs)
self.button_one = tk.Radiobutton(self,**{'text': 'One', 'underline': '0', 'anchor': 'w'})
self.button_one.grid(**{'sticky': 'ew', 'row': '1'})
self.button_three = tk.Radiobutton(self,**{'text': 'Three', 'underline': '0', 'anchor': 'w'})
self.button_three.grid(**{'sticky': 'ew', 'row': '3'})
self.button_two = tk.Radiobutton(self,**{'text': 'Two', 'underline': '1', 'anchor': 'w'})
self.button_two.grid(**{'sticky': 'ew', 'row': '2'})
self.check_button = tk.Checkbutton(self,**{'text': 'Checkbutton', 'underline': '2', 'anchor': 'w'})
self.check_button.grid(**{'sticky': 'ew', 'row': '0'})
self.menu_button = tk.Menubutton(self,**{'text': 'Menubutton', 'indicatoron': '1', 'relief': 'raised'})
self.menu_button.grid(**{'sticky': 'ew', 'row': '5'})
self.standard_button = tk.Button(self,**{'text': 'Button', 'underline': '0'})
self.standard_button.grid(**{'sticky': 'ew', 'row': '4'})
Application().mainloop()
Für Container Widgets, die andere Widgets enthalten, wird hierbei jeweils eine Klasse erzeugt.
Das Problem ist nun, wie kann man die GUI nachbearbeiten und die geänderte GUI dann wieder in das Source File übernehmen?
Bei den GUI Scripts speichere ich mir die markierten Code Teile in den Container Widgets und kann dann Widgets und Code zusammen abspeichern.
Das geht aber bei den exportierten Files nicht.
Aber mir ist da eine andere Lösung eingefallen. Beim Abspeichern könnte man in bereits vorhandenern Source Files den Beginn der Klassendefinitionen ersetzen.
Dabei wird ein Sourcefile gelesen, bis eine Klassendefinition auftaucht. Wenn es sich um eine Klasse handelt, die auch in der GUI definiert ist, dann wird der Teil bis nach erster Leerzeile nach def __init__ einfach ausgetauscht. Wenn etwas Neues hinzugekommen ist, dann wird dieser Rest vor 'mainloop(' eingefügt.
Gute Idee?