2013-05-04 6 views
8

Tkinter를 사용하여 GUI의 단추를 사용하여 항목의 텍스트를 설정하려고합니다. 이 GUI는 수천 개의 단어를 분류하는 데 도움이됩니다. 5 개의 카테고리로 분류되며 각 카테고리에는 버튼이 있습니다. 버튼을 사용하면 속도가 현저히 빨라지고 그렇지 않으면 매번 버튼을 사용하고 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을 상속하는, 그리고 Entry 클래스 객체의 deleteinsert 방법을 사용한다 set 방법을 정의하는 것입니다 :

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() 
관련 문제