![]() |
|||
| HSG |
|
import tkinter as tk
class View(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
# Fenster
self.title("Text-Demo 0")
self.geometry('255x90+400+100')
# Text
self.tA = tk.Text(self,width=30,height=3) # width und height in Zeichen
self.tA.delete('1.0',tk.END)
self.tA.insert(tk.END,'Lorem ipsum dolor sit amet, consectetur, adipisci velit ...')
self.tA.place(x=20,y=20)
self.tA.bind('<Alt-Key-x>',self.cbText)
def cbText(self,event):
self.focus_force()
print('Alt-x im Text-Widget, Inhalt:',self.tA.get('1.0',tk.END))
v = View()
v.mainloop()

Das Beispiel zeigt, wie unerwünschte Eingaben rückgängig gemacht werden können. Das text-widget hängt 'ungefragt' ein '\n' an, was hier entfernt wird.
Die Funktion str2bytes versucht den aus ASCII-Zeichen bestehenden String zu einem Bytestring zu machen. Dabei wird '\\' als Backslash (Byte: 92) und '\xb4' als hexadezimale Darstellung von 180 interpretiert. Unvollständige '\'-Sequenzen führen (hoffentlich) nicht zu einem Absturz.
def str2bytes(s):
h = []
while s != '':
if s[0] != '\\':
h.append(ord(s[0]))
s = s[1:]
print(h,s,len(s))
elif (s[0] == '\\') and (len(s) == 1):
s = ''
elif (s[0] == '\\') and (s[1] == '\\'):
h.append(ord('\\'))
s = s[2:]
elif (s[0] == '\\') and (s[1] == 'x'):
try:
h.append(int(s[2:4],16))
s = s[4:]
except:
s = s[2:]
else:
h.append(ord('?'))
s = s[1:]
return bytes(h)
import tkinter as tk
class View(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
# Fenster
self.title("Text-Demo 1")
self.geometry('255x90+400+100')
# Beenden
self.protocol("WM_DELETE_WINDOW",self.Halt)
# Text
self.tA = tk.Text(self,width=30,height=3) # width und height in Zeichen
self.tA.delete('1.0',tk.END)
self.tA.insert(tk.END,'abc')
self.tA.place(x=20,y=20)
self.tA.bind('<KeyRelease>',self.cbText)
def cbText(self,event):
if (len(event.char) > 0) and (ord(event.char) > 31):
if not(32 <= ord(event.char) <= 127):
self.tA.delete('insert-1c')
print(str2bytes(self.tA.get('1.0',tk.END)[:-1])) # DEBUG
def Halt(self): # Aufräumarbeiten
self.quit() # mainloop beenden
self.destroy()
v = View()
v.mainloop()
