2013-05-04 93 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()