GOOGLE ADS

viernes, 15 de abril de 2022

¿Cómo crear la función dedent en python tkinter?

Estoy creando un editor de código y quiero crear una función de sangría cuando edito una línea sangrada. Creo una función sangrada pero no puedo crear una función de sangría.

Creé la función de dentición pero no funciona correctamente Cada vez que presiono el botón de retroceso se dibuja un rectángulo en el widget de texto:

este:-

ingrese la descripción de la imagen aquí

esta es la función dedent que he creado:

def backspace(event):
widget = event.widget
line = widget.get("insert linestart", "insert lineend")
match = re.match(r'^(\s+)', line)
current_indent = len(match.group(0)) if match else 0
if current_indent == 4*(len(match.group(0))):
new_indent = current_indent - 4
widget.insert("insert", event.char + " "*new_indent)
else:
new_indent = current_indent - 1
widget.insert("insert", event.char + " "*new_indent)

este es mi código completo (no la versión corta del código completo del código real):

from tkinter import*
import re
def autoindent(event):
widget = event.widget
index = widget.index(INSERT)
index2 = "%s-%sc"%(index,1)
word = widget.get(index2,index)
line = widget.get("insert linestart", "insert lineend")
match = re.match(r'^(\s+)', line)
if word == ":":
current_indent = len(match.group(0)) if match else 0


new_indent = current_indent + 4

widget.insert("insert", event.char + "\n" + " "*new_indent)
else:
whitespace = match.group(0) if match else ""

widget.insert("insert", f"\n{whitespace}")
return "break"
def backspace(event):
widget = event.widget
line = widget.get("insert linestart", "insert lineend")
match = re.match(r'^(\s+)', line)
current_indent = len(match.group(0)) if match else 0
if current_indent == 4*(len(match.group(0))):
new_indent = current_indent - 4
widget.insert("insert", event.char + " "*new_indent)
else:
new_indent = current_indent - 1
widget.insert("insert", event.char + " "*new_indent)
root = Tk()
editor = Text(root)
editor.pack()
editor.bind("<Return>",autoindent)
editor.bind("<BackSpace>",backspace)
root.mainloop()

esto es lo que he creado:
ingrese la descripción de la imagen aquí


Solución del problema

Noté que no ha definido la fuente o las pestañas en su editor.

Prueba esto.

from tkinter import font
root = tk.Tk()
TAB = 4
textfont = font.Font(family = "Consolas", size = 10)
indent = TAB * textfont.measure("M")
editor = tk.Text(
root,
font = textfont,
tabs = indent)
editor.pack()

Este enfoque evita la necesidad de una función de retroceso.

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...