Hallo zusammen,
da ich zum einen neu hier bin und mit Python/Tkinter noch nicht gearbeitet habe möchte ich mal einige Fragen stellen bei denen ich hier nicht so ganz weiter komme. Ich hoffe dass mir dadurch der Einstieg etwas erleichtert werden kann.
Ich versuche seit geraumer Zeit auf einem Frame mehrere Elemente an oder abzuschalten. Hier zuerst einmal mein Quellcode der auch nicht sonderlich strukturiert ist aber...
Alle Elemente die ich im Moment brauche sind erst einmal dargestellt. Hier sollte das so sein dass wenn das Programm aufgerufen wird nur die drei Button von oben zu sehen sind. Nachdem der erste Button gedrückt wurde sind sowohl die Checkboxen zu sehen als auch +, - und Reset Button.
Was muss ich hier tun?
Hier der Quellcode:
try: #Python 2 imports
from Tkinter import *
import ttk
import tkFileDialog as filedialog
except ImportError: #Python 3 imports
from tkinter import *
from tkinter import ttk
from tkinter import filedialog
from tkinter import messagebox
class Flugdaten:
def __init__(self, master):
self.master = master
master.title("Flugdaten Manager")
master.geometry("450x400")
master.grid_propagate(0)
self.total = 0
self.entered_number = 1
self.total_label_text = IntVar()
self.total_label_text.set(self.total)
self.total_label = Label(master, textvariable=self.total_label_text)
self.label = Label(master, text="Fluege Anzahl: ")
vcmd = master.register(self.validate) # we have to wrap the command
self.entry = Entry(master, validate="key", validatecommand=(vcmd, '%P'))
self.add_button = Button(master, text="+", command=lambda: self.update("add"))
self.subtract_button = Button(master, text="-", command=lambda: self.update("subtract"))
self.reset_button = Button(master, text="Reset", command=lambda: self.update("reset"))
self.Flug_button = Button(master, text="Flugdaten", command=lambda: self.update("Unter"), height = 5, width = 10)
self.Baustunden_button = Button(master, text="Baustunden", command=lambda: self.update("Bau"), height = 5, width = 10)
self.Flugleiter_button = Button(master, text="Flugleiter", command=lambda: self.update("Flugl"), height = 5, width = 10)
self.Infolbl = Label(master, text="Informationen :")
# LAYOUT
# Button
self.Flug_button.grid(row=0, column=1, sticky=W)
self.Baustunden_button.grid(row=0, column=2, sticky=W+E)
self.Flugleiter_button.grid(row=0, column=3, sticky=E)
self.label.grid(row=2, column=0, sticky=W)
self.total_label.grid(row=2, column=1, columnspan=1, sticky=E)
# Checkboxen
def auswahlClick():
dezimalzahl = var1 print dezimalzahl
var1 = IntVar()
var2 = IntVar()
Checkbutton(master, text="Verbrenner", command=auswahlClick, variable=var1).grid(row=1, column=1, sticky=W)
Checkbutton(master, text="Elektro", command=auswahlClick, variable=var2).grid(row=1, column=2, sticky=E)
self.add_button.grid(row=5, column=0)
self.subtract_button.grid(row=5, column=1)
self.reset_button.grid(row=5, column=2, sticky=W+E)
self.Infolbl.grid(row=6, column=1, sticky=S+W)
def validate(self, new_text):
if not new_text: # the field is being cleared
self.entered_number = 0
return True
try:
self.entered_number = int(new_text)
return True
except ValueError:
return False
def update(self, method):
if method == "add":
self.total += self.entered_number
elif method == "subtract":
self.total -= self.entered_number
elif method == "Unter":
self.entered_number=10
self.total -= self.entered_number
else: # reset
self.total = 0
self.total_label_text.set(self.total)
self.entry.delete(0, END)
root = Tk()
my_gui = Flugdaten(root)
root.mainloop()
Danke
Reinhold
Tkinter über Netbeans
Vielleicht mal in der Übersicht einfacher zu lesen:
Code: Alles auswählen
try: #Python 2 imports
from Tkinter import *
import ttk
import tkFileDialog as filedialog
except ImportError: #Python 3 imports
from tkinter import *
from tkinter import ttk
from tkinter import filedialog
from tkinter import messagebox
class Flugdaten:
def __init__(self, master):
self.master = master
master.title("Flugdaten Manager")
master.geometry("450x400")
master.grid_propagate(0)
self.total = 0
self.entered_number = 1
self.total_label_text = IntVar()
self.total_label_text.set(self.total)
self.total_label = Label(master, textvariable=self.total_label_text)
self.label = Label(master, text="Fluege Anzahl: ")
vcmd = master.register(self.validate) # we have to wrap the command
self.entry = Entry(master, validate="key", validatecommand=(vcmd, '%P'))
self.add_button = Button(master, text="+", command=lambda: self.update("add"))
self.subtract_button = Button(master, text="-", command=lambda: self.update("subtract"))
self.reset_button = Button(master, text="Reset", command=lambda: self.update("reset"))
self.Flug_button = Button(master, text="Flugdaten", command=lambda: self.update("Unter"), height = 5, width = 10)
self.Baustunden_button = Button(master, text="Baustunden", command=lambda: self.update("Bau"), height = 5, width = 10)
self.Flugleiter_button = Button(master, text="Flugleiter", command=lambda: self.update("Flugl"), height = 5, width = 10)
self.Infolbl = Label(master, text="Informationen :")
# LAYOUT
# Button
self.Flug_button.grid(row=0, column=1, sticky=W)
self.Baustunden_button.grid(row=0, column=2, sticky=W+E)
self.Flugleiter_button.grid(row=0, column=3, sticky=E)
self.label.grid(row=2, column=0, sticky=W)
self.total_label.grid(row=2, column=1, columnspan=1, sticky=E)
# Checkboxen
def auswahlClick():
dezimalzahl = var1 print dezimalzahl
var1 = IntVar()
var2 = IntVar()
Checkbutton(master, text="Verbrenner", command=auswahlClick, variable=var1).grid(row=1, column=1, sticky=W)
Checkbutton(master, text="Elektro", command=auswahlClick, variable=var2).grid(row=1, column=2, sticky=E)
self.add_button.grid(row=5, column=0)
self.subtract_button.grid(row=5, column=1)
self.reset_button.grid(row=5, column=2, sticky=W+E)
self.Infolbl.grid(row=6, column=1, sticky=S+W)
def validate(self, new_text):
if not new_text: # the field is being cleared
self.entered_number = 0
return True
try:
self.entered_number = int(new_text)
return True
except ValueError:
return False
def update(self, method):
if method == "add":
self.total += self.entered_number
elif method == "subtract":
self.total -= self.entered_number
elif method == "Unter":
self.entered_number=10
self.total -= self.entered_number
else: # reset
self.total = 0
self.total_label_text.set(self.total)
self.entry.delete(0, END)
root = Tk()
my_gui = Flugdaten(root)
root.mainloop()