Como fazer o python tkinter adicionar barras automaticamente a cada 2 caracteres
Aug 28 2020
from tkinter import *
root=Tk()
root.geometry("400x300")
def e_input():
print(e1.get())
l1=Label(root,text="Enter here:")
l1.place(x=30,y=40)
e1=Entry(root,bd=2,width=25)
e1.place(x=100,y=40)
b1=Button(root,text="Enter",command=e_input)
b1.place(x=250,y=40)
root.mainloop()
Neste código, o usuário deve inserir manualmente as barras a cada 2 caracteres. ajude-me a fazer aquela coisa por padrão, Imagem anexada de como eu precisava que fosse ... insira a descrição da imagem aqui
Respostas
MichaelGuidry Aug 28 2020 at 02:04
No meu exemplo, expandimos o Entrywidget para lidar com seu formato de data. O validatecommandgarante que estamos inserindo números e que o texto corresponde ao formato do regular expression. A chave bindcontrola a inserção de barras na posição adequada.
import tkinter as tk, re
class DateEntry(tk.Entry):
def __init__(self, master, **kwargs):
tk.Entry.__init__(self, master, **kwargs)
vcmd = self.register(self.validate)
self.bind('<Key>', self.format)
self.configure(validate="all", validatecommand=(vcmd, '%P'))
self.valid = re.compile('^\d{0,2}(\\\\\d{0,2}(\\\\\d{0,4})?)?$', re.I)
def validate(self, text):
if ''.join(text.split('\\')).isnumeric():
return not self.valid.match(text) is None
return False
def format(self, event):
if event.keysym != 'BackSpace':
i = self.index('insert')
if i in [2, 5]:
if self.get()[i:i+1] != '\\':
self.insert(i, '\\')
class Main(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
DateEntry(self, width=10).grid(row=0, column=0)
if __name__ == "__main__":
root = Main()
root.geometry('800x600')
root.title("Date Entry Example")
root.mainloop()
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?