我想有一個用於輸入日期的輸入框,以便用戶只能以單向輸入。Tkinter - 輸入框 - 格式化爲日期
輸入框中鍵入看起來之前像這樣(沒有下劃線)__/__/____
和/
的不會被刪除,當用戶鍵入日期。
感謝
我想有一個用於輸入日期的輸入框,以便用戶只能以單向輸入。Tkinter - 輸入框 - 格式化爲日期
輸入框中鍵入看起來之前像這樣(沒有下劃線)__/__/____
和/
的不會被刪除,當用戶鍵入日期。
感謝
由於@Bryan Oakley的主要線索,我已經提出了這方面的工作代碼。
(更新:扔了幾年的編程經驗和近期一些讀者的眼睛是雪亮的,在提高了代碼。)
from __future__ import print_function
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
class DateEntry(tk.Frame):
def __init__(self, master, frame_look={}, **look):
args = dict(relief=tk.SUNKEN, border=1)
args.update(frame_look)
tk.Frame.__init__(self, master, **args)
args = {'relief': tk.FLAT}
args.update(look)
self.entry_1 = tk.Entry(self, width=2, **args)
self.label_1 = tk.Label(self, text='/', **args)
self.entry_2 = tk.Entry(self, width=2, **args)
self.label_2 = tk.Label(self, text='/', **args)
self.entry_3 = tk.Entry(self, width=4, **args)
self.entry_1.pack(side=tk.LEFT)
self.label_1.pack(side=tk.LEFT)
self.entry_2.pack(side=tk.LEFT)
self.label_2.pack(side=tk.LEFT)
self.entry_3.pack(side=tk.LEFT)
self.entries = [self.entry_1, self.entry_2, self.entry_3]
self.entry_1.bind('<KeyRelease>', lambda e: self._check(0, 2))
self.entry_2.bind('<KeyRelease>', lambda e: self._check(1, 2))
self.entry_3.bind('<KeyRelease>', lambda e: self._check(2, 4))
def _backspace(self, entry):
cont = entry.get()
entry.delete(0, tk.END)
entry.insert(0, cont[:-1])
def _check(self, index, size):
entry = self.entries[index]
next_index = index + 1
next_entry = self.entries[next_index] if next_index < len(self.entries) else None
data = entry.get()
if len(data) > size or not data.isdigit():
self._backspace(entry)
if len(data) >= size and next_entry:
next_entry.focus()
def get(self):
return [e.get() for e in self.entries]
if __name__ == '__main__':
win = tk.Tk()
win.title('DateEntry demo')
dentry = DateEntry(win, font=('Helvetica', 40, tk.NORMAL), border=0)
dentry.pack()
win.bind('<Return>', lambda e: print(dentry.get()))
win.mainloop()
如果您將條目窗口小部件的邊框寬度設置爲零,然後將所有窗口小部件放置在邊框寬度爲1(一)的框架中,則它看起來就像一個窗口小部件。否則,出色的工作。不要以爲Tkinter是一個小部件的集合,更像是一箱足球。 –
**哇。** 不是我正在尋找的東西,而是超出它。 謝謝你投入這個時間! 謝謝@pydsigner和@Bryan!你們搖滾:D –
@BryanOakley是的,我很着急在睡覺前把它弄好。我正在完成一個改進版本。 – pydsigner
問題是什麼? – Tim
@Tim我假設OP想要這樣一個輸入框。 – pydsigner
我不相信這是可能的。 – pydsigner