Code: Alles auswählen
while a>0:
x = Entry(window)
x.pack()
a=a-1
return
Das Poblem ist aber das man hierbei die Felder nicht mehr löschen kann. Kann mir vielleicht jemand andere Möglichkeiten nennen oder passende docs geben?
Code: Alles auswählen
while a>0:
x = Entry(window)
x.pack()
a=a-1
return
Nein gibt es nicht (würde ja auch keinen Sinn machen, so ein Befehl). Du musst die Felder selbst löschen und neu anlegen.secretwz hat geschrieben:Gibt es evtl. ein Befehl mit dem man das Programm wieder auf Anfang setzt? Weil wenn ich das Programm starte und "4" eingebe, entstehen 4 neue Eingabefelder. Wenn ich dann nochmal "3" eingebe, entstehen weitere 3 Felder. Ich möchte aber dass die anderen 4 davor gelöscht werden und es dann 3 und nicht insgesamt 7 sind.
Code: Alles auswählen
from Tkinter import *
window = Tk()
entry1 = Entry(window)
entry1.pack()
def anzahl():
anzahl_entry = entry1.get()
anzahl_entry = float(anzahl_entry)
try:
neu_entry
except:
while anzahl_entry>0:
neu_entry = Entry(window)
neu_entry.pack()
anzahl_entry=anzahl_entry-1
else:
neu_entry.destroy()
button1=Button(window, text="Go!", command=anzahl)
button1.pack()
window.mainloop()
Also das ganze Programm beenden und neustarten?[/code]Leoniads hat geschrieben:Du musst die Felder selbst löschen und neu anlegen.
Code: Alles auswählen
import Tkinter as tk
from random import randint
def anzahl():
#~~ Bestimme eine zufaellige Anzahl von Entry-Objekte
num_entry_obj = randint(1,9)
#~~ Entferne bestehende Entry-Objekte
if window.entry_obj_list != ():
for entry_obj in window.entry_obj_list:
entry_obj.destroy()
window.entry_obj_list = list()
#~~ Erzeuge Entry-Objekte
for obj in xrange(num_entry_obj):
entry_obj = tk.Entry(entry_frame, text='', width=10, bg='white')
entry_obj.pack(side='top', pady=1)
window.entry_obj_list.append(entry_obj)
window = tk.Tk()
#~~ Sammelliste fuer Entry-Objekte
window.entry_obj_list = list()
#~~ Rahmen fuer die Aufnahme der Entry-Widgets
entry_frame = tk.Frame(window)
entry_frame.pack(side='top')
#~~ Rahmen fuer die Aufnahme der Schaltflaechen
button_frame = tk.Frame(window)
button_frame.pack()
button1 = tk.Button(button_frame, text="Go!", width=10, command=anzahl)
button1.pack()
window.mainloop()
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
####
import Tkinter as tk
####
class Gui(object):
def __init__(self, n=3):
self.root = tk.Tk()
self.nvar = tk.StringVar()
self.go_frame = tk.LabelFrame(self.root, text='How much?')
self.go_entry = tk.Entry(self.go_frame, textvariable=self.nvar, width=30)
self.go_entry.pack(padx=10, pady=7, fill=tk.X)
self.go_frame.pack(padx=4, pady=8, fill=tk.X)
self.go_but = tk.Button(self.go_frame, text='GO', command=self.new_entries)
self.go_but.pack(fill=tk.X)
self.make_entries(self.root, n)
def make_entries(self, parent, n):
self.eframe = tk.LabelFrame(parent)
self.svars = [tk.StringVar() for _ in xrange(n)]
self.entries = []
for i, s in enumerate(self.svars):
s.set(i)
entry = tk.Entry(self.eframe, textvariable=s)
entry.pack(fill=tk.BOTH, expand=True)
self.entries.append(entry)
self.eframe.pack()
def new_entries(self):
try:
n = int(self.go_entry.get())
except ValueError:
n = 5
n = min(n, 16)
for e in self.entries:
e.destroy()
self.eframe.destroy()
self.make_entries(self.root, n)
def run(self):
self.root.mainloop()
####
if __name__ == '__main__':
Gui(7).run()
Code: Alles auswählen
from Tkinter import *
from random import randint
window = Tk()
entry1 = Entry(window)
entry1.pack()
def anzahl():
#~~ Bestimme eine zufaellige Anzahl von Entry-Objekte
num_entry_obj = entry1.get()
num_entry_obj = float(num_entry_obj)
test.append(num_entry_obj)
#~~ Entferne bestehende Entry-Objekte
if window.entry_obj_list != ():
for entry_obj in window.entry_obj_list:
entry_obj.destroy()
window.entry_obj_list = list()
#~~ Erzeuge Entry-Objekte
for obj in xrange(num_entry_obj):
entry_obj = Entry(entry_frame, text='', width=10, bg='white')
entry_obj.pack(side='top', pady=1)
test.append(entry_obj)
window.entry_obj_list.append(entry_obj)
def go():
for i in xrange(test[0]):
entryy = entry_obj.get()
liste_entry.append(entryy)
print liste_entry
#~~ Sammelliste fuer Entry-Objekte
window.entry_obj_list = list()
#~~ Rahmen fuer die Aufnahme der Entry-Widgets
entry_frame = Frame(window)
entry_frame.pack(side='top')
#~~ Rahmen fuer die Aufnahme der Schaltflaechen
button_frame = Frame(window)
button_frame.pack()
button1 = Button(button_frame, text="Anzahl!", width=10, command=anzahl)
button1.pack()
button2 = Button(button_frame, text="Go!", width=10, command=go)
button2.pack()
liste_entry = list()
test = list()
window.mainloop()
Code: Alles auswählen
import Tkinter as tk
from random import randint, choice
class MyObjects(object):
"""Hilfs-Klasse fuer globale Objekte"""
#~~ Um die 'global'-Anweisung zu umgehen, haengt man dieser
# Klasse die global verwendeten Objekte als Attribute an.
def __init__(self):
pass
window = tk.Tk()
window.config(bg='steelblue3')
def error():
"""Rueckstellung der Anzahl-Eingabe Fehlereingabe"""
entry_anzahl.delete(0,'end')
entry_anzahl.config(fg='black')
def anzahl():
"""Uebernehme die Anzahl fuer Eingabefelder"""
#~~ Eingabekontrolle
try:
anzahl_felder = int(entry_anzahl.get())
except ValueError:
entry_anzahl.delete(0,'end')
entry_anzahl.config(fg='red')
entry_anzahl.insert(0,"Ungueltig!")
#~~ Einblenden der Fehlermeldung (1 Sekunde)
window.after(1000, error)
print "Anzahl-Eingae ist ungueltig!!!"
return
create_entry_fields(anzahl_felder)
def create_entry_fields(anzahl_felder):
"""Erzeuge die gewaehlte Anzahl Eingabefelder"""
#~~ Zuerst entferne bestehende Entry-Objekte
if my_objects.entry_obj_list != ():
for entry_obj in my_objects.entry_obj_list:
entry_obj.destroy()
my_objects.entry_obj_list = list()
#~~ Erzeuge die gewaehlte Anzahl Entry-Objekte
for obj in xrange(anzahl_felder):
entry_obj = tk.Entry(entry_frame, text='', width=10, bg='khaki1',
highlightthickness=0)
entry_obj.pack(side='top', pady=2)
my_objects.entry_obj_list.append(entry_obj)
def go():
"""Auswertung der eingegebenen Daten"""
#~~ Leere bestehende Eingabe-Datenliste
my_objects.entry_data_list = list()
#~~ Schreibe die Entry-Daten in die Eingabeliste
for obj in my_objects.entry_obj_list:
my_objects.entry_data_list.append(obj.get())
print "Debug: Datenliste", my_objects.entry_data_list
#~~ Gebe ein Zufaelliger Eintrag aus
print "Zufall = ", choice(my_objects.entry_data_list)
my_objects = MyObjects()
#~~ Sammelliste fuer Entry-Objekte
my_objects.entry_obj_list = list()
#~~ Sammelliste fuer Entry-Daten
my_objects.entry_data_list = list()
#~~ Eingabefeld fuer die Anzahl
entry_anzahl = tk.Entry(window, bg='white', highlightthickness=0)
entry_anzahl.pack(padx=2, pady=2)
#~~ Rahmen fuer die Aufnahme der Schaltflaechen
button_frame = tk.Frame(window, bg=window['bg'])
button_frame.pack()
#~~ Rahmen fuer die Aufnahme der Entry-Widgets
entry_frame = tk.Frame(window, bg=window['bg'])
entry_frame.pack(side='top')
button1 = tk.Button(button_frame, text="Anzahl!", width=10, command=anzahl,
highlightthickness=0)
button1.pack(padx=2, pady=2)
button2 = tk.Button(button_frame, text="Go!", width=10, command=go,
highlightthickness=0)
button2.pack(padx=2, pady=2)
#~~ Setze den Fokus auf das Eingabefeld fuer die Anzahl
entry_anzahl.focus_set()
window.mainloop()
Code: Alles auswählen
import Tkinter as tk
Dass ``__init__`` leer ist bedeutet nicht dass die Klasse keine Attribute hat - das bedeutet nur, dass der Konstruktor nichts tut. Im dem Fall ist er eigentlich völlig überflüssig. Die Klasse wird hier als Container verwendet um Daten abzuspeichern.secretwz hat geschrieben:EDIT2: Ich habe mich jetzt nochmal näher beschäftigt, und irgendwie habe ich da noch ein paar kleine Haken... Könnte mir vielleicht jemand diese Klasse am Anfang erklären?
Es wird ein Objekt mit dem __init__ dort erstellt richtig? Aber dann kommt ja eine pass-Anweisung, das heißt doch dass nichts passiert, also das Objekt keine "EIgenschaften" hat.
Code: Alles auswählen
map(float, liste)
[float(s) for s in liste]
Code: Alles auswählen
>>> los = ["1.4", "5"]
>>> map(float, los)
[1.3999999999999999, 5.0]
>>> [float(s) for s in los]
[1.3999999999999999, 5.0]
Code: Alles auswählen
>>> los[0]+los[1]
'1.45'
>>> los[0]
'1.4'
>>> a = los[0]
>>> b = los[1]
>>> a+b
'1.45'