在tkinter中使用show参数时,如何正确创建一个条目小部件有一个占位符?

时间:2018-05-19 17:33:27

标签: python tkinter

我创建了一个占位符类,它带有两个参数,一个tkinter条目和条目文本,或者占位符。最初,该条目配置为显示“•”。当我使用占位符类而不是显示占位符的条目时,字符显示为“•”。我不知道如何解决这个问题,任何帮助都将受到高度赞赏。

以下是我的课程。

from tkinter import *   
class Place_Holder:
    def __init__(self,entry,place_holder):
        self.place_holder=place_holder
        self.entry=entry
        self.entry.bind("<FocusIn>",self.focus_in)
        self.entry.bind("<FocusOut>",self.focus_out)
        self.put_text(self.place_holder)
    def put_text(self,place_holder):
        self.entry.insert(0,place_holder)
        self.entry["fg"]="gray"
    def focus_in(self,event=0):
        if self.entry["fg"]=="gray":
            self.entry.delete(0,END)
            self.entry["fg"]="black"
    def focus_out(self,event=0):
        if not self.entry.get():
            self.entry.delete(0,END)
            self.put_text(self.place_holder)

以下代码是我尝试测试它的方式。

from tkinter import *
from tkinter import ttk
def main():
    global root
    root=Tk()
    testing()
    root.mainloop()
def testing():
    global frame,variable,entry2
    frame=Frame(root)
    frame.grid()
    variable=IntVar()

    label=Label(frame,text="Username:")
    label.grid(row=0,column=0,sticky=W)

    entry=Entry(frame,width=20)
    entry.grid(row=0,column=1,sticky=W)
    entry.focus()


    label2=Label(frame,text="Password:")
    label2.grid(row=1,column=0,sticky=W)

    entry2=Entry(frame,width=20,show="•")
    entry2.grid(row=1,column=1,sticky=W)

    check_but=ttk.Checkbutton(frame,text="Show Password",variable=variable,command=switch)
    check_but.grid(row=2,column=0,columnspan=2)

    entry1_config=Place_Holder(entry,"Username")
    entry2_config=Place_Holder(entry2,"Password")
def switch():
    if variable.get()!=1:
        entry2.configure(show="")
    else:
        entry2.configure(show="•")      
main()  

0 个答案:

没有答案