Python Tkinter를 2 자마다 자동으로 슬래시 추가하는 방법

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

이 코드에서 사용자는 2 자마다 슬래시를 수동으로 입력해야합니다. 기본적으로 그 물건을 만들 수 있도록 도와주세요. 필요한 방법에 대해 첨부 된 이미지 ... 여기에 이미지 설명을 입력하세요.

답변

MichaelGuidry Aug 28 2020 at 02:04

내 예에서는 Entry위젯을 확장 하여 날짜 형식을 처리합니다. 은 validatecommand우리가 숫자를 입력하고 텍스트가 regular expression. 키 bind는 적절한 위치에 슬래시를 삽입하는 것을 처리합니다.

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