Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Alinear texto en un widget Text en tkinter.
#1
Hola Francisco, hola gente ¿Cómo están?.
Dejo a continuación las 2 funciones para que se entienda
lo que no logro conseguir, en la primera al insertar la línea
de texto sale todo desalineado(la columna) y en la segunda
perfecto, ¿Qué estoy haciendo mal?..-
Les comento que es la primera vez que utilizo el  widget Text
y por lo que estuve leyendo tiene mas de 260 atributos y métodos
por lo tanto parece un widget muy potente, lo que ocurre es que me
falta tan solo eso para concluir mi traductor, desde ya muchas 
gracias por el tiempo que le dediquen.-


Código:
def autocompletar(traductor, texto):
    resultado.config(state=tk.NORMAL)
    resultado.delete("1.0","end")
    total = len(texto)
    if total >= 1:   
        for trad in traductor:
            ingles=trad[0]
            filtro = ingles[0:total]
            if texto == filtro:
                espaniol = trad[1]
                final = f"{ingles.ljust(15, ' ')}{espaniol}\n"
                resultado.insert(tk.INSERT, final)
    resultado.config(state='disabled')
    return True


Código:
import codecs
import re

palabras = []
final=0
with codecs.open('traductor.txt', 'r', encoding='utf-8') as archivo:
    for linea in archivo:
        tmpLinea = linea.strip()
        linea = tmpLinea.split(',')
        palabras.append(linea)
        final += 1
        if final == 10:
            break

for pal in palabras:
    ingles = pal[0]
    espaniol = pal[1]
    final = f"{ingles.ljust(15, ' ')}{espaniol}"
    print(final)

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#2
Hola, Daniel, ¿cómo estás?

No trabajé mucho con el tk.Text. ¿Podrías poner un código mínimo ejecutable que reproduzca el error que estás obteniendo (o el comportamiento no deseado, mejor dicho)? Según lo que comentás supongo que se debe a que la diferencia en las longitudes de la consola y el tk.Text en este caso.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
Hola Francisco, estoy muy bien, dejo el código y te comento que debido
a que la impaciencia me gano,  lo reemplace por un treeview y funciona muy
bien pero igual me interesa demasiado este widget.-
Ya me pongo a programar un editor de texto para aprender el  widget text, parece
muy interesante.-


Código:
from tkinter import ttk
import tkinter as tk
from tkinter import *
from functools import partial
import codecs
import re

def centrarVentana(ventana):
    ancho_ventana = 465
    alto_ventana = 265

    x_ventana = ventana.winfo_screenwidth() // 2 - ancho_ventana // 2
    y_ventana = ventana.winfo_screenheight() // 2 - alto_ventana // 2

    posicion = str(ancho_ventana) + "x" + str(alto_ventana) + "+" + str(x_ventana) + "+" + str(y_ventana)
    ventana.geometry(posicion)

    ventana.resizable(0,0)

def cargarEnLista():
    palabras = []
    with codecs.open('traductor.txt', 'r', encoding='utf-8') as archivo:
        for linea in archivo:
            tmpLinea = linea.strip()
            linea = tmpLinea.split(',')
            palabras.append(linea)

    return palabras

def traducir(traductor, texto):
    tradIe = "                   Ingles/Español\n\n"
    tradEi = "                   Español/Ingles\n\n"
    resultado.config(state=tk.NORMAL)
    resultado.delete("1.0","end")
    if len(texto) >= 1:
        for trad in traductor:
            if texto == trad[0]:
                resultado.insert('1.1', tradIe)
                resultado.insert('3.1', trad[1])
                break
            else:
                if texto in trad[1]:
                    resultado.insert('1.1', tradEi)
                    resultado.insert('3.1', trad[0])
                    break
   
    resultado.config(state='disabled')
    return True

def autocompletar(traductor, texto):
    resultado.config(state=tk.NORMAL)
    resultado.delete("1.0","end")
    total = len(texto)
    if total >= 1:   
        for trad in traductor:
            ingles=trad[0]
            filtro = ingles[0:total]
            if texto == filtro:
                espaniol = trad[1]
                final = f"{ingles} --  {espaniol}\n"
                resultado.insert('1.0', final)
    resultado.config(state='disabled')
    return True




root = tk.Tk()
root.title(" Traductor Ingles/español")
centrarVentana(root)

# Caja para mostrar traducción
resultado = tk.Text(root, width=38, height=4, font=("Verdana",12),
    state='disabled', borderwidth=3, fg="blue", padx=10, pady=10)
resultado.place(x=10, y=10)

# Scrollbar
sb = Scrollbar(root)
sb.place(x=410, y=3, height=110)
sb.config(command=resultado.yview)
resultado.config(yscrollcommand=sb.set)

# Etiquetas traductor.
traductorLabel = ttk.Label(root, text = "Traductor", font=("Verdana", 12))
traductorLabel.place(x=13, y=123)

# Etiquetas autocompletar.
autoLabel = ttk.Label(root, text = "Autocompletar", font=("Verdana", 12))
autoLabel.place(x=240, y=123)


# Entrada traductor.
varTraductor = tk.StringVar()
traductorEntry = ttk.Entry(root, textvariable=varTraductor,
    validate="key", font=("Verdana", 11))
traductorEntry.place(x=15, y=150, width=200, height=25)

traductorEntry.focus()

# Entrada autocompletar.
varAuto = tk.StringVar()
autoEntry = ttk.Entry(root, textvariable=varAuto,
    validate="key", font=("Verdana", 11))
autoEntry.place(x=240, y=150, width=200, height=25)


# Botón cerrar
botonCerrar = ttk.Button(root, text="Cerrar",
    command = root.destroy)
botonCerrar.place(x=205, y=200, width=80, height=40)       

traductor=cargarEnLista()

traductorEntry.config(validatecommand=(root.register(partial(traducir, traductor)), "%P"))
autoEntry.config(validatecommand=(root.register(partial(autocompletar, traductor)), "%P"))

root.mainloop()

Te dejo una idea sobre la BD


Cita:adult,adulto
afternoon,tarde
as,como
at,en
all,todos
about,acerca de
also,además  -  también
agent,agente
ahead,adelante
agency,agencia

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#4
Excelente, Daniel.

Efectivamente el control tkinter.Text es muy potente. Hay de hecho un editor de código programado en Python y tkinter llamado Thonny que emplea ese control para permitirle al usuario escribir código de Python con resaltado de sintaxis y otras funcionalidades interesantes.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#5
(29-03-2022, 03:16 PM)Daniel.py escribió: Hola Francisco, hola gente ¿Cómo están?.
Dejo a continuación las 2 funciones para que se entienda
lo que no logro conseguir, en la primera al insertar la línea
de texto sale todo desalineado(la columna) y en la segunda
perfecto, ¿Qué estoy haciendo mal?..-
Les comento que es la primera vez que utilizo el  widget Text
y por lo que estuve leyendo tiene mas de 260 atributos y métodos
por lo tanto parece un widget muy potente, lo que ocurre es que me
falta tan solo eso para concluir mi traductor, desde ya muchas 
gracias por el tiempo que le dediquen.-


Código:
def autocompletar(traductor, texto):
    resultado.config(state=tk.NORMAL)
    resultado.delete("1.0","end")
    total = len(texto)
    if total >= 1:   
        for trad in traductor:
            ingles=trad[0]
            filtro = ingles[0:total]
            if texto == filtro:
                espaniol = trad[1]
                final = f"{ingles.ljust(15, ' ')}{espaniol}\n"
                resultado.insert(tk.INSERT, final)
    resultado.config(state='disabled')
    return True


Código:
import codecs
import re

palabras = []
final=0
with codecs.open('traductor.txt', 'r', encoding='utf-8') as archivo:
    for linea in archivo:
        tmpLinea = linea.strip()
        linea = tmpLinea.split(',')
        palabras.append(linea)
        final += 1
        if final == 10:
            break

for pal in palabras:
    ingles = pal[0]
    espaniol = pal[1]
    final = f"{ingles.ljust(15, ' ')}{espaniol}"
    print(final)

Slds. Daniel ☕☕☕

Buenas Daniel:

https://www.tutorialspoint.com/how-do-i-...ext-widget

Quizá esto te sirva de ayuda aunque eso si está en inglés. (Bastante clarito).

Parece que existe la opción text.tag_configure para añadir justify al texto.
Responder
#6
Gracias, mil gracias por la sugerencia, te comento, no puedo zafar
del lio que me metí tratando de hacer un editor de texto con el widget
“text” ni bien avance con este atolladero que tengo en este momento
te comento que paso.-
Para colmo de males no puedo consultar en el foro porque Francisco
me comento que no tiene experiencia con ese widget(espero que no lea esto Big Grin Big Grin Big Grin ),
así que estoy “solo” como loco malo, nos estamos leyendo…

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#7
Daniel, podés preguntar tranquilo y lo pensamos en conjunto! Smile
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)