@wuf
Sagtest du nicht, du brauchst die RadioButtons nicht wirklich
Andere Fehler wären zB.
- ein Tk-Toplevel in dem FlächenRechner zu erzeugen und diesen nicht als Frame zu implementieren. (So kann mann ihn nur für diese eine Anwendung nutzen)
- self.v.set(0) - bringt gar nicht, du musst schon "self.v.set(self.radio_button_data[0][0])" oder "self.v.set('One') nutzen. (dem entsprechend solltest du auch über das gesetzte self.v.set('Two') nach denken)
- in "calculate" ist es ziemlich unsinnig das Ergebnis immer wieder mit ".get()" zu holen, da jedes dieser gets eine Tk-interaktion ist und somit ein etwas teurer Zugriff, ich würde hier auch ein Wörterbuch nehmen
- In den Berechnungs-Methoden kannst du auch gleich das Ergebnis zurückgeben brauchst die Variable nicht
- Zudem würde ich die Methoden als normale Funktionen schreiben, da diese allgemein gültig sind und die Parameter entsprechen übergeben
- und natürlich eine richtige "if __name__ == '__main__':" ein bauen
TKInter hilfe mein Programm funktioniert nich :(
Eventuell kannst du dir noch mal die ganzen "pack()"-Aufrufe ansehen und dort einen gemeinsamen Nenner finden und diesen als Standard in einem Wörterbuch definieren.
Code: Alles auswählen
frame_style = dict(side='top', fill='both', expand='no', padx=10, pady=10)
label_style = dict(side='top', fill='x', padx=5, pady=5)
self.frame_entry_a.pack(frame_style)
self.label_remark_a.pack(label_style)
self.frame_entry_b.pack(frame_style)
self.label_remark_b.pack(label_style)
self.frame_result.pack(frame_style)
#und wenn es doch mal leicht abweicht
self.label_remark_x.pack(label_style, side="left")
Hallo Xynon1
Nach einfliessen lassen deiner interessanten und hilfreichen Anregungen entstand ein nächster Wurf des 'Flächenrechner':
BEMERKUNG: Habe die mathematische Umgebung belassen wie sie ist.
Besten Dank! Gruß wuf
Nach einfliessen lassen deiner interessanten und hilfreichen Anregungen entstand ein nächster Wurf des 'Flächenrechner':
Code: Alles auswählen
# -*- coding: utf-8 -*-
import Tkinter as tk
from math import *
NAME = 'Flächenrechner'
FONT_NAME = ('Arial' ,20)
LABEL_AUSWAHL = 'Wovon möchten Sie die Fläche berechnet haben?'
LABEL_EINGABE_A = 'Eingabe-A:'
REMARK_ENTRY_A =\
'''Geben Sie hier ein :
Bei Rechteck, Parallelogramm, Quadrat und Dreieck die Unterkante
und für den Kreis den Radius.'''
LABEL_EINGABE_B = 'Eingabe-B:'
REMARK_ENTRY_B =\
'''Geben Sie hier ein :
Bei Rechteck die Seitenkante, bei Dreieck
und Parallelogramm die Höhe.'''
BUTTON_NAME = 'Berechnen'
LABEL_RESULT = 'Berechnungs-Ergebnis'
class FlaechenRechner(tk.Frame):
def __init__(self, app, calc_nr, **keys):
tk.Frame.__init__(self, app, **keys)
label_frm_prop = dict(relief='groove', bd=2, bg=self['bg'],
pady=5)
label_frm_style = dict(side='top', fill='both', expand='no',
padx=10, pady=10)
label_rem_prop = dict(bg=self['bg'], justify='left',
anchor='nw', fg='brown')
label_rem_style = dict(side='top', fill='x', padx=5, pady=5)
entry_prop = dict(width=20, bg='white', bd=1, highlightthickness=0)
entry_style = dict(side='top', anchor='center', padx=5, pady=5)
# Titel
self.name = tk.Label(self,
text=NAME+'-'+str(calc_nr), font=FONT_NAME, fg='green', bg='gray40',
bd=4, padx=10, highlightthickness=0, relief='raised')
self.name.pack(side='top', pady=10)
self.label_auswahl = tk.Label(None, text=LABEL_AUSWAHL,
fg='blue', bg=self['bg'])
self.label_auswahl.pack()
self.umrandung = tk.LabelFrame(self, label_frm_prop,
labelwidget=self.label_auswahl)
self.umrandung.pack(label_frm_style)
self.v = tk.StringVar()
self.radio_button_data = [
['One', 'Dreieck'],
['Two', 'Quadrat'],
['Three', 'Rechteck'],
['Four', 'Kreis'],
['Five', 'Parallelogramm']
]
# Erstelle alle Auswahl-Radiobuttons
self.radio_buttons = list()
for value, text in self.radio_button_data:
radio_button = tk.Radiobutton(self.umrandung, value=value,
text=text,variable=self.v)
radio_button.pack(side='top', anchor='nw', padx=10)
self.radio_buttons.append(radio_button)
# Eingabe-A
self.label_entry_a = tk.Label(None, text=LABEL_EINGABE_A, fg='blue',
bg=self['bg'])
self.label_entry_a.pack()
self.frame_entry_a = tk.LabelFrame(self, label_frm_prop,
labelwidget=self.label_entry_a)
self.frame_entry_a.pack(label_frm_style)
self.label_remark_a = tk.Label(self.frame_entry_a, label_rem_prop,
text=REMARK_ENTRY_A)
self.label_remark_a.pack(label_rem_style)
self.entry_a = tk.Entry(self.frame_entry_a, entry_prop)
self.entry_a.pack(entry_style)
self.entry_a.insert(0, 0.0)
# Eingabe-B
self.label_entry_b = tk.Label(None, text=LABEL_EINGABE_B, fg='blue',
bg=self['bg'])
self.label_entry_b.pack()
self.frame_entry_b = tk.LabelFrame(self, label_frm_prop,
labelwidget=self.label_entry_b)
self.frame_entry_b.pack(label_frm_style)
self.label_remark_b = tk.Label(self.frame_entry_b, label_rem_prop,
text=REMARK_ENTRY_B)
self.label_remark_b.pack(label_rem_style)
self.entry_b = tk.Entry(self.frame_entry_b, entry_prop)
self.entry_b.pack(entry_style)
self.entry_b.insert(0, 0.0)
# Ergebnis
self.label_result_frame = tk.Label(None, text=LABEL_RESULT, fg='blue',
bg=self['bg'])
self.label_result_frame.pack()
self.frame_result = tk.LabelFrame(self, relief='groove', bd=2,
bg=self['bg'], labelwidget=self.label_result_frame, pady=5)
self.frame_result.pack(side='top', fill='both', expand='no', padx=10,
pady=10)
self.result = tk.StringVar()
self.result.set(0.0)
self.label_result = tk.Label(self.frame_result, highlightthickness=0,
bd=1, relief='sunken', bg='white',textvariable=self.result,
width=20)
self.label_result.pack(side='top', pady=5)
# Befehl: Berechnen
self.button_calculate = tk.Button(self, text=BUTTON_NAME,
command = self.calculate)
self.button_calculate.pack(side='top', pady=5)
# Setze den Radiobutton für die Quadratberechnung
self.v.set('Two')
def calculate(self):
# self.v.get()
if self.v.get() =="One":
ergebnis = self.dreiecksberechnung()
if self.v.get() == "Two":
ergebnis = self.quadratsberechnung()
if self.v.get() == "Three":
ergebnis = self.rechtecksberechnung()
if self.v.get() == "Four":
ergebnis = self.kreisberechnung()
else:
ergebnis = self.parallelogrammberechnung()
self.result.set(ergebnis)
def dreiecksberechnung(self):
print 1
d = float(self.entry_a.get() )* float(self.entry_a.get()) * 0.5
return d
def quadratsberechnung(self):
print 2
q = float(self.entry_a.get()) * float(self.entry_a.get())
return q
def rechtecksberechnung(self):
print 3
r = float(self.entry_a.get()) * float(self.entry_b.get())
return r
def kreisberechnung(self):
print 4
k = 3.14 * float(self.entry_a.get()) * float(self.entry_a.get())
return k
def parallelogrammberechnung(self):
print 5
p = float(self.entry_a.get()) * float(self.entry_b.get())
return p
if __name__ == '__main__':
app = tk.Tk()
app.title('Flächenrechner-Plattform')
rechner_1 = FlaechenRechner(app, 1)
rechner_1.pack(side='left')
rechner_2 = FlaechenRechner(app, 2)
rechner_2.pack(side='left')
app.mainloop()
Besten Dank! Gruß wuf
Take it easy Mates!