TkInter Material Grundlagen Templates Ereignisse Button Entry Label Canvas Welt-Bild-Transformation Text Dialoge Optionmenu Listbox Fenster Toplevel Timer Threads Pack Drag&Drop
Pfad: Startseite / Fächer / Informatik / Python / TkInter / Text
Autor: mk
31.03.2011 20:26:41
717
Text

Beispiel 1

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

Text-Demo 0

Beispiel 2

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

unerwünschte Zeichen

Links