如何使用tkinter中的按钮设置`Entry`小部件的文本/值/内容

unl*_*kme 19 python events tkinter tkinter-entry

我正在尝试Entry使用tkinter模块使用GUI中的按钮设置窗口小部件的文本.

该GUI用于帮助我将数千个单词分为五类.每个类别都有一个按钮.我希望使用一个按钮会显着加快我的速度,我想每次都仔细检查这些单词,否则我只会使用按钮并让GUI处理当前单词并带来下一个单词.

由于某种原因,命令按钮的行为不像我想要的那样.这是一个例子:

win = Tk()

v = StringVar()
def setText(word):
    v.set(word)

a = Button(win, text="plant", command=setText("plant")
a.pack()
b = Button(win, text="animal", command=setText("animal"))
b.pack()
c = Entry(win, textvariable=v)
c.pack()
win.mainloop()
Run Code Online (Sandbox Code Playgroud)

到目前为止,当我能够编译时,点击什么都不做.

Mil*_*ála 55

您可能想要使用insert方法.

此脚本将文本插入Entry.可以command在Button的参数中更改插入的文本.

from tkinter import *

def set_text(text):
    e.delete(0,END)
    e.insert(0,text)
    return

win = Tk()

e = Entry(win,width=10)
e.pack()

b1 = Button(win,text="animal",command=lambda:set_text("animal"))
b1.pack()

b2 = Button(win,text="plant",command=lambda:set_text("plant"))
b2.pack()

win.mainloop()
Run Code Online (Sandbox Code Playgroud)

  • @m3nda:确实,即使使用“import tkinter as tk”,在其后面添加“from tkinter.constants import *”仍然很方便,以避免模块中的许多常量使用“tk”定义的前缀。 - 尽管您也可以只使用文字字符串,而不需要导入任何内容。即`e.delete(0,'end')`或`e.delete(0,'END')`。 (4认同)
  • 只是想对新来者说,您可能将`tkinter导入为tk`,因此,带有`e.delete(0,END)`的行变为`e.delete(0,tk.END)`。 (2认同)

Buv*_*inJ 12

如果你使用"文本变量" tk.StringVar(),你可以set()这样做.

无需使用Entry删除和插入.此外,当禁用或只读条目时,这些功能不起作用!但是,文本变量方法也可以在这些条件下工作.

import Tkinter as tk

...

entryText = tk.StringVar()
entry = tk.Entry( master, textvariable=entryText )
entryText.set( "Hello World" )
Run Code Online (Sandbox Code Playgroud)


fin*_*oot 6

您可以在以下两种方法之间进行选择,以设置Entry小部件的文本。对于示例,假设已导入库import tkinter as tk和根窗口root = tk.Tk()


  • 方法A:使用deleteinsert

    插件Entry提供的方法deleteinsert可用于给它的文本设置为一个新值。首先,您必须删除所有以前的旧文本,Entrydelete从中需要开始和结束删除的位置。由于我们要删除完整的旧文本,因此我们从0当前结束的任何地方开始并结束。我们可以通过访问该值END。之后,该字段Entry为空,我们可以new_text在位置插入0

    entry = tk.Entry(root)
    new_text = "Example text"
    entry.delete(0, tk.END)
    entry.insert(0, new_text)
    
    Run Code Online (Sandbox Code Playgroud)

  • 方法B:使用 StringVar

    您必须创建一个在示例中StringVar称为的新对象entry_text。另外,Entry必须使用关键字arguments创建小部件textvariable。之后,每次使用更改entry_textset,文本将自动显示在Entry小部件中。

    entry_text = tk.StringVar()
    entry = tk.Entry(root, textvariable=entry_text)
    new_text = "Example text"
    entry_text.set(new_text)
    
    Run Code Online (Sandbox Code Playgroud)

  • 完整的工作示例,其中包含通过Button以下方法设置文本的两种方法:

    这个窗口

    屏幕截图

    由以下完整的工作示例生成:

    import tkinter as tk
    
    def button_1_click():
        # define new text (you can modify this to your needs!)
        new_text = "Button 1 clicked!"
        # delete content from position 0 to end
        entry.delete(0, tk.END)
        # insert new_text at position 0
        entry.insert(0, new_text)
    
    def button_2_click():
        # define new text (you can modify this to your needs!)
        new_text = "Button 2 clicked!"
        # set connected text variable to new_text
        entry_text.set(new_text)
    
    root = tk.Tk()
    
    entry_text = tk.StringVar()
    entry = tk.Entry(root, textvariable=entry_text)
    
    button_1 = tk.Button(root, text="Button 1", command=button_1_click)
    button_2 = tk.Button(root, text="Button 2", command=button_2_click)
    
    entry.pack(side=tk.TOP)
    button_1.pack(side=tk.LEFT)
    button_2.pack(side=tk.LEFT)
    
    root.mainloop()
    
    Run Code Online (Sandbox Code Playgroud)