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()