2013-05-04 94 views
8

我想在使用Tkinter的GUI中使用按钮设置条目的文本。 这个GUI可以帮助我分类数千个单词。分为五个类别,每个类别都有一个按钮。我希望使用按钮会显着加快速度,并且我希望每次都检查一下单词,否则我只会使用该按钮并让GUI处理当前单词并带来下一个单词。 由于某种原因,命令按钮的行为并不像我想要的那样。 这是一个例子使用按钮设置条目的文本tkinter

def cWin(): 
    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() 

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

回答

25

你可能想使用insert方法。

该脚本插入一个文本Entry。插入的文本可以在按钮的command参数中更改。

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() 
6

如果使用 “文本变量” tk.StringVar(),你可以set()说。

不需要使用Entry删除和插入。而且,这些功能在禁用或只读条目时不起作用!但是,文本变量方法也适用于这些条件。

import Tkinter as tk 

... 

entryText = tk.StringVar() 
entry = tk.Entry(master, textvariable=entryText) 
entryText.set("Hello World") 
0

一种方式是继承一个新的类,EntryWithSet,并定义set方法,使得使用的Entry类对象的deleteinsert方法:

try:      # In order to be able to import tkinter for 
    import tkinter as tk # either in python 2 or in python 3 
except ImportError: 
    import Tkinter as tk 


class EntryWithSet(tk.Entry): 
    """ 
    A subclass to Entry that has a set method for setting its text to 
    a given string, much like a Variable class. 
    """ 

    def __init__(self, master, *args, **kwargs): 
     tk.Entry.__init__(self, master, *args, **kwargs) 


    def set(self, text_string): 
     """ 
     Sets the object's text to text_string. 
     """ 

     self.delete('0', 'end') 
     self.insert('0', text_string) 


def on_button_click(): 
    import random, string 
    rand_str = ''.join(random.choice(string.ascii_letters) for _ in range(19)) 
    entry.set(rand_str) 


if __name__ == '__main__': 
    root = tk.Tk() 
    entry = EntryWithSet(root) 
    entry.pack() 
    tk.Button(root, text="Set", command=on_button_click).pack() 
    tk.mainloop()