[英]How to Decorate Tkinter Text Widget
您需要將<FocusIn>
綁定到回調,然后在回調中刪除占位符(如果存在)。
如果文本框的當前內容為空, <FocusOut>
綁定到另一個回調並插入占位符。
下面是一個例子:
import tkinter as tk
class Textbox(tk.Text):
# create the google image
tkimg = None
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
if self.tkimg is None:
self.tkimg = tk.PhotoImage(file='images/google16x16.png')
self.insert_placeholder()
self.bind('<FocusIn>', self.on_focus_in)
self.bind('<FocusOut>', self.on_focus_out)
def insert_placeholder(self):
''' insert the placeholder into text box '''
lbl = tk.Label(self, text='Search the Web', image=self.tkimg, compound='left',
fg='darkgray', bg=self.cget('bg'), font=(None,10,'bold'))
self.window_create('end', window=lbl)
self.placeholder = self.window_names()[0]
def on_focus_in(self, event):
try:
# check whether the placeholder exists
item = self.window_cget(1.0, 'window')
if item == self.placeholder:
# remove the placeholder
self.delete(1.0, 'end')
except:
# placeholder not found, do nothing
pass
def on_focus_out(self, event):
if self.get(1.0, 'end-1c') == '':
# nothing input, so add back the placeholder
self.insert_placeholder()
root = tk.Tk()
Textbox(root, height=10).pack()
Textbox(root, height=5).pack()
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.