bei meinem Fensterprojekt das ich mit Tkinter mache, brauche ich Eure Hilfe, da ich noch Anfänger bei Tkinter bin.
Ich habe die Fenstergröße definiert und einen Label links (Streifen), einen Label rechts (Streifen), einen Label unten (Streifen) und ein großes Textfenster in der Mitte platziert. Im unteren Label habe ich ein schmales Textfenster, sowie 3 Buttons erstellt.
Der linke und rechte Label sind für Buttons gedacht, wobei die Buttons auf dem rechten Label, die Buttons des linken Labels definieren sollen.
Beispiel: Ich betätige rechts den Button Kunden, dann sollte auf dem linken Label die für Kunden vorgesehen Buttons erscheinen.
Das Layout, was ich beschrieben habe, habe ich schon umgesetzt.
Das mit den rechten Buttons die, die linken Buttons steuern sollen, ist noch eine Baustelle.
Hier mein Code:
Code: Alles auswählen
class MyWindow(Tk):
def __init__(self, callback):
Tk.__init__(self)
self.callback = callback
# Fenster
self.title('officeplanet')
self.geometry('1280x1024')
# Farbe Button-Frames
bcolor = 'yellow'
# Farbe Buttons
bbcolor = 'grey'
fbcolor = 'black'
# Farbe Texteingabe, Textfenster
btxt = 'black'
ftxt = 'white'
# Text Schrift
font = 'NimbusSansL'
# Textgröße Buttons, Texteingabe
fontsize = 14
# Textgröße
output_fontsize = 12
# Frame links
self.label_left = Label(self, width=15, background = bcolor)
self.label_left.pack(side='left', fill='y')
# Frame rechts
label_right = Label(self, width=15, background = bcolor)
label_right.pack(side='right', fill='y')
# Textfenster
txtWindow = Text(self, width=200, background = btxt,
foreground = ftxt, font = (font, output_fontsize))
txtWindow.pack(anchor='n', expand='YES', fill='y')
# Frame unten
label_down = Label(self, width=200, background = bcolor)
label_down.pack(anchor='s', ipady=10, fill='x')
# Frame unten, für Buttons und Eingabefeld
label_down2 = Label(label_down, heigh=5, width=100,
background = bcolor)
label_down2.pack(anchor='s')
# Text-Eingabe
inputline = Entry(label_down2, width = 80,
background = btxt, foreground = ftxt,
font = (font, fontsize))
inputline.pack(ipady=7, pady=15)
# Button-Funktionen
#############################################################
# Bildschirm leeren
def screen_blank():
txtWindow.delete(1.0, END)
# Dateien mit exterenem Programm öffnen
def openfile():
self.name = askopenfilename(filetypes=[("TXT-Formate",
".txt .TXT .odt .ODT .doc .DOC"), ("CSV-Formate",
".csv .CSV .xls .XLS"), ("PDF-Formate",
".pdf .PDF")], initialdir=[os.environ['HOME']])
if self.name:
fileopen(self.name)
# Datei öffnen und im Textfeld ausgeben
def openfile_intern():
self.name = askopenfilename(filetypes=[("TXT-Formate",
".txt"), ("PDF-Formate", ".pdf .PDF")],
initialdir=[os.path.abspath(sys.argv[0])])
if self.name:
screen_blank()
for line in fileinput.input(self.name):
txtWindow.insert(END, line)
# Datei speichern
def openfile_save_intern():
self.filesave = open(self.name,"w")
self.filesave.write(txtWindow.get(1.0,END))
self.filesave.flush()
self.filesave.close()
#############################################################
# Buttons rechts
button_right = {
'01-Kunden' : lambda: check_button('01'),
'02-Lieferanten' : lambda: check_button('02'),
'03-Auftrag' : '',
'04-Bestellung' : '',
'05-Rechnung' : '',
'06-Verwaltung' : '',
'07-Buchhaltung' : '',
'08-EDV' : '',
'09-Produkte' : '',
'10-Open_Data' : openfile_intern,
'11-Save_Data' : openfile_save_intern,
'12-Clean' : screen_blank,
}
# Buttons links
button_left = {
'0101-Kunden' : '',
'0102-Kunden_2' : '',
'0103-Kunden_3' : '',
'0201-Lieferanten' : '',
'0202-Lieferanten_2' : '',
'0203-Lieferanten_3' : '',
}
for b in sorted(button_right):
Button(label_right, width=14, text=b.split('-')[1],
background = bbcolor, font = (font, fontsize),
foreground = fbcolor, command=button_right[b]).pack(
padx=3, ipady=2, pady=19)
def check_button(subgroup):
for b in sorted(button_left):
group = b[:2]
if subgroup != '' and group == subgroup:
Button(self.label_left, width=14, text=b.split('-')[1],
background = bbcolor, font = (font, fontsize),
foreground = fbcolor, command=button_left[b]
).pack(padx=3, ipady=2, pady=19)
# Buttons unten
button = {
'01-Suchen' : '',
'02-Bearbeiten' : '',
'03-Zurück' : '',
}
for b in sorted(button):
Button(label_down2, width=15, text=b.split('-')[1],
background = bbcolor, font = (font, fontsize),
foreground = fbcolor, command=button[b]).pack(side='left',
ipadx=10, padx=35, pady=10)
# Hauptmenü
mainMenu = Menu(self, background = 'yellow')
self.config(menu = mainMenu)
mainmenu = {
'01_Datei' : 'Datei',
'02_EDV' : 'EDV',
'03_Sicherheit' : 'Sicherheit',
}
submenu = {
'011_Öffnen' : ['Öffnen', openfile],
'012_Intern_öffnen' : ['Intern öffnen', openfile_intern],
'013_Intern_speichern' : ['Intern speichern', openfile_save_intern],
'014_Bildschirm_leeren' : ['Bildschirm leeren', screen_blank],
'015_Einstellungen' : ['Einstellungen', ''],
'016_Beenden' : ['Beenden', self.quit],
'021_Daten_Update' : ['Daten-Update', ''],
'022_Edit Basedata' : ['Edit Basedata', ''],
'031_Backup' : ['Backup', ''],
'032_Restore' : ['Restore', ''],
}
for m in sorted(mainmenu):
name = ''.join(m[:2])
name = Menu(mainMenu)
mainMenu.add_cascade(label = m[3:], menu = name)
for s in sorted(submenu):
if m[:2] == s[:2]:
name.add_command(label = submenu[s][0],
command = submenu[s][1])
class Controller(object):
def __init__(self):
self.view = MyWindow(self.berechne)
self.berechne() # zur Initialisierung
self.view.mainloop()
def berechne(self):
self.view.label_left.config()
print('hallo controller')
if __name__ == '__main__':
Controller()
Grüße Nobuddy