2013-05-04 4 views
8

Я пытаюсь установить текст записи с помощью кнопки в графическом интерфейсе с помощью Tkinter. Этот 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() это.

Не нужно использовать запись для удаления и вставки. Более того, эти функции не работают, когда запись отключена или только для чтения! Однако метод текстовой переменной работает и в этих условиях.

import Tkinter as tk 

... 

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

Один из способов будет наследовать новый класс, EntryWithSet и определение set метод, который использует delete и insert методов объектов Entry класса:

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