Da musste ich das schreiben:
Code: Alles auswählen
if not len(self.dictionary[key].strip())
Code: Alles auswählen
if not len(self.dictionary[key].strip())
Hatte ich doch beschrieben. Aber wenn Du es als Beispiel möchtest:BlackJack hat geschrieben:@Alfons Mittelmeyer: Was heisst „isspace() funktionierte nicht“? Welcher Code? Was für ein Traceback? Bei welchem Wert?
Code: Alles auswählen
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
class Application(tk.Tk):
def __init__(self,**kwargs):
tk.Tk.__init__(self,**kwargs)
# widget definitions ===================================
self.entry = tk.Entry(self)
self.entry.pack()
self.entry.bind('<Return>',lambda event, me = self.entry: self.check_isspace(me))
def check_isspace(event,me):
print(me.get().isspace())
if __name__ == '__main__':
Application().mainloop()
Sorry, zu spät in Bett gegangen zu früh aufgewacht, Konzentrationsmangel, Hangover. Ob etwas leer ist erfahre ich ja nicht durch isspace() sondern durch not isspace()Sirius3 hat geschrieben:@Alfons Mittelmeyer: dein Beispiel funktioniert so, wie es funktionieren soll. Was machst Du, was ist das Ergebnis, was erwartest Du?
Ja stimmt, hab ich jetzt umgekehrt ausprobiert, aber da geht es auch nicht. Da muss ich wohl das komplette Beispiel bringen.Sirius3 hat geschrieben:wohl kaum.
Code: Alles auswählen
# -*- coding: utf-8 -*-
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
import re
class Input_Class:
def __init__(self, save_dictionary=None, dictionary = None):
self.dictionary = dictionary if dictionary else { key : '' for key in self.keys() }
self.save_dictionary = save_dictionary
def save(self):
for key in self.keys():
print(self.dictionary[key].isspace())
if not len(self.dictionary[key].strip()):
return False,key + ' fehlt'
plz = self.dictionary['PLZ']
if not re.match('(?:[0-9]{5})',plz):
return False,'PLZ stimmt nicht'
if self.save_dictionary:
self.save_dictionary(**self.dictionary)
else:
print(self.dictionary)
print('\nsave function missing')
return True,''
def keys(self):
return [ 'Name',
'Vorname',
'Straße',
'Hausnummer',
'PLZ',
'Ort',
]
def __getitem__(self,key):
return self.dictionary[key]
def __setitem__(self,key,value):
self.dictionary[key] = value
class Application(tk.Tk):
def __init__(self,**kwargs):
tk.Tk.__init__(self,**kwargs)
# widget definitions ===================================
self.Eingabemaske = Eingabemaske(self)
self.Eingabemaske.pack(fill='x')
self.Eingabemaske.create_Eingabemaske(Input_Class())
class Eingabemaske(tk.LabelFrame):
def __init__(self,master,**kwargs):
tk.LabelFrame.__init__(self,master,**kwargs)
self.config(text='Eingabemaske')
# widget definitions ===================================
self.content = tk.Frame(self)
self.content.pack(fill='x')
def create_Eingabemaske(self,input_object):
keys = input_object.keys()
maxlen = max(map(len, keys))
self.content.destroy()
self.content = tk.Frame(self)
self.content.pack(fill='x')
entrylist = [] # Liste mit den Eingabefeldern zum Speichern
for key in keys:
frame = tk.Frame(self.content)
frame.pack(fill='x')
label = tk.Label(frame,text = key, width = maxlen+1,anchor = 'e')
label.pack(side = 'left')
# Sonderbehandlung für spezielle Eingabefelder
if key == 'PLZ':
width = 5
expand = 0
fill = None
elif key == 'Hausnummer':
width = 6
expand = 0
fill = None
else:
width = 30
expand = 1
fill = 'x'
# ===========================================
entry = tk.Entry(frame,width = width)
entry.key = key # das ist zum Speichern
entrylist.append(entry) # und das auch
entry.delete(0,'end')
entry.insert(0,str(input_object[key]))
entry.pack(side = 'left',fill = fill,expand= expand,padx = 5,pady=1)
status_label = tk.Label(self.content)
status_label.pack(side = 'left')
def save_input():
for entry in entrylist:
input_object[entry.key] = str(entry.get())
result,status = input_object.save()
status_label.config(text = status,fg='blue',font = 'TkDefaultFont 10 bold')
# positive result should be reported
okbutton = tk.Button(self.content,text = 'OK')
okbutton.pack(side = 'right', anchor = 'e')
okbutton['command'] = save_input
if __name__ == '__main__':
Application().mainloop()
Naja, weil es genau bei diesen 128 Zeilen nicht funktioniert!Alfons Mittelmeyer hat geschrieben:BlackJack hat geschrieben:@Alfons Mittelmeyer: Ich weiss nicht warum die ganzen 128 Zeilen nötig sind wenn es doch nur um `isspace()` geht. :K
Un warum bringt dann hier isspace() immer False, ganz gleich ob das Entry Feld leer ist oder nicht leer, während len() in Verbindung mit strip() funktioniert?BlackJack hat geschrieben:@Alfons Mittelmeyer: Das funktioniert mit beliebigen anderen Zeilen auch nicht anders — `isspace()` wird von diesen Zeilen in keinster Weise beeinflusst. Auch nicht davon wo die Zeichenkette her kommt, also ob die aus einem Wörterbuch oder einer Liste oder sonst wo her kommt.
So, und was ist dann das?BlackJack hat geschrieben:@Alfons Mittelmeyer: Das funktioniert mit beliebigen anderen Zeilen auch nicht anders — `isspace()` wird von diesen Zeilen in keinster Weise beeinflusst. Auch nicht davon wo die Zeichenkette her kommt, also ob die aus einem Wörterbuch oder einer Liste oder sonst wo her kommt.
Code: Alles auswählen
a = { 'test': '' }
print(a['test'].isspace())
Code: Alles auswählen
a = { 'test': ' ' }
print(a['test'].isspace())
Code: Alles auswählen
In [4]: a = { 'test': '' }
In [5]: a['test'].isspace()
Out[5]: False
In [6]: ''.isspace()
Out[6]: False
Code: Alles auswählen
# entweder
if not a.strip():
#oder
if not a or a.isspace():