【问题标题】:manipulating entry text value in tkinter在 tkinter 中操作条目文本值
【发布时间】:2015-07-25 10:11:17
【问题描述】:

我想添加单词“在此处搜索!”一旦用户开始输入条目,条目就会消失!

就像我们在 facebook 网页“What's on ur mind”中看到的一样

from tkinter import *


class Application(Frame):
    def __init__(self, master=NONE):
        Frame.__init__(self, master)
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.frame = Frame(self)
        self.entry = Entry(self.frame)
        self.entry.pack()
        self.frame.pack()    

if __name__ == "__main__":
    root = Tk()
    app = Application(master=root)
    app.mainloop()

【问题讨论】:

  • 您已经告诉我们您想要代码做什么,但您还没有提出任何问题。问题是什么?您是要我们为您编写代码吗?您对解决方案的特定方面有疑问吗?你知道如何设置绑定吗?你知道如何插入文本吗? ...?
  • thanx bryan,你说得对,我实际上不知道我的问题到底是什么。在我问这样的问题之前,我应该阅读更多内容。

标签: python user-interface python-3.x tkinter


【解决方案1】:

您可以处理Entry 小部件的键事件并在第一个键事件发生时擦除内容:

from tkinter import *

class Application(Frame):
    def __init__(self, master=NONE):
        Frame.__init__(self, master)
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.frame = Frame(self)
        self.entry = Entry(self.frame)
        self.entry.modified = False
        self.entry.insert(0, "Search Here!")
        self.entry.bind("<Key>", self.entry_key)
        self.entry.pack()
        self.frame.pack()

    def entry_key(self, event):
        if not self.entry.modified:
            self.entry.delete(0, END)
            self.entry.modified = True

if __name__ == "__main__":
    root = Tk()
    app = Application(master=root)
    app.mainloop()

为了检测我绑定并初始化到False 的第一个更改@ 一个名为modified 的属性到Entry 小部件实例。当第一个键事件发生时,输入框的内容被删除,modified 属性设置为True,这会防止在后续键事件中清除内容。

【讨论】:

    【解决方案2】:

    您必须使用“StringVar”来设置或获取文本:

    from tkinter import *
    
    
    class Application(Frame):
        def __init__(self, master=NONE):
            Frame.__init__(self, master)
            self.pack()
            self.create_widgets()
    
        def create_widgets(self):
            self.frame = Frame(self)
            my_entry = StringVar()
            my_entry.set("Search here")
            self.entry = Entry(self.frame, text=my_entry)
            self.entry.pack()
            self.frame.pack()    
    
    if __name__ == "__main__":
        root = Tk()
        app = Application(master=root)
        app.mainloop()
    

    【讨论】:

    • 您不必需要使用StringVar -- 您可以在没有它的情况下获取和设置文本。事实上,我认为你永远不应该使用StringVar,除非你需要它来实现它的一些其他功能,而不仅仅是获取和设置(例如跟踪它,或者将两个小部件链接在一起)
    猜你喜欢
    • 2016-10-28
    • 2014-07-13
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2019-06-19
    相关资源
    最近更新 更多