na bitte, damit kann man doch schon ein semi-professionelles Grundgerüst erstellen. Ist aber noch einiges dran zu tun.
Code: Alles auswählen
from Tkinter import *
tk = Tk()
tk.title("Programmwahl")
tk.configure(width = tk.winfo_screenwidth(), height = tk.winfo_screenheight()-100)
tk.vSelectedProgram = IntVar()
tk.vSelectedProgram.set(1)
dTextfelder1 = { 0:["Output", "Ausgabe"]}
dTextfelder2 = { 0:["Input", "Hallo Welt"],
1:["Output", "Ausgabe"]}
dTextfelder3 = { 0:["Input", ""],
1:["Input", ""],
2:["Output", ""]}
class Program:
"""Klasse verwaltet Programmdaten und -funktionen"""
def __init__(self, wRoot, dTextfelder, iProgNumber):
self.dTextfelder = dTextfelder
self.wRoot = wRoot
self.iProgNumber = iProgNumber
self.sName = "Program %i" % iProgNumber
self.dTextCompounds = {}
for iNumber, lParams in dTextfelder.items():
self.dTextCompounds[iNumber] = TextCompound(wRoot, iNumber, lParams)
PF.add_button(iProgNumber, self.sName)
def get_textfelder(self):
return self.dTextfelder
def show(self):
for oTextCompound in self.dTextCompounds.values():
oTextCompound.grid()
def hide(self):
for oTextCompound in self.dTextCompounds.values():
oTextCompound.grid_remove()
def start(self):
pass ## TODO
def stop(self):
pass ## TODO
class ProgramFrame(Frame):
def __init__(self):
Frame.__init__(self, tk, bd = 4, relief = SUNKEN)
self.place(x = 0, y = 0, width = tk.winfo_screenwidth(), height = 60)
self.iLastProg = tk.vSelectedProgram.get()
def add_button(self, iValue, sName):
def switch(iValue = iValue):
dPrograms[self.iLastProg].hide()
dPrograms[iValue].show()
self.iLastProg = iValue
Radiobutton(self, text = sName, command = switch, value = iValue, variable = tk.vSelectedProgram, indicatoron = False).grid(column = iValue, row = 1, padx = 5, pady = 5)
class ControlFrame(Frame):
fontBig = ("Courier", 24, "bold")
def __init__(self):
Frame.__init__(self, tk, bd = 4, relief = SUNKEN)
Button(self, text = "Start", font = self.fontBig, bg = "#3f5").grid(ipadx = 5, ipady = 5, pady = 3, sticky = NSEW)
Button(self, text = "Stop", font = self.fontBig, bg = "#f35").grid(ipadx = 5, ipady = 5, pady = 3, sticky = NSEW)
self.place(x = 0, y = 60, width = 160, height = tk.winfo_screenheight()-160)
class TextCompound(Frame):
fontCaption = ("Courier", 16, "bold")
def __init__(self, wRoot, iNumber, lParams):
Frame.__init__(self, wRoot)
Label(self, text = lParams[0], font = self.fontCaption).grid()
self.text = Text(self, width = 30, height = 40)
self.text.grid(padx = 10, pady = 10)
self.text.insert("1.0", lParams[1])
self.grid(row = 1, column = iNumber)
self.grid_remove()
class TextFrame(Frame):
def __init__(self):
Frame.__init__(self, tk, bd = 4, relief = SUNKEN)
self.place(x = 160, y = 60, width = tk.winfo_screenwidth()-160, height = tk.winfo_screenheight()-160)
PF = ProgramFrame()
CF = ControlFrame()
TF = TextFrame()
dPrograms = { 1:Program(TF, dTextfelder1, 1),
2:Program(TF, dTextfelder2, 2),
3:Program(TF, dTextfelder3, 3)}
dPrograms[1].show()
tk.mainloop()
Schlecht (nicht) kommentiert, ich weiß. Habe es leider nicht mehr geschafft.