2013-05-04 21 views
8

Sto tentando di impostare il testo di una voce utilizzando un pulsante in una GUI utilizzando Tkinter. Questa GUI è per aiutarmi a classificare migliaia di parole. in cinque categorie, ciascuna delle categorie ha un pulsante. Speravo che l'uso di un pulsante mi velocizzasse in modo significativo e che volessi ricontrollare le parole ogni volta altrimenti userei semplicemente il pulsante e far sì che la GUI elabori la parola corrente e porti la parola successiva. I pulsanti di comando per qualche motivo non si comportano come li voglio. Questo è un esempioimposta il testo di una voce utilizzando un pulsante 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() 

finora quando sono in grado di compilare il clic non fa nulla.

risposta

25

È possibile utilizzare il metodo insert.

Questo script inserisce un testo in Entry. Il testo inserito può essere modificato nel parametro command del pulsante.

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

Se si utilizza una "variabile di testo" tk.StringVar(), si può semplicemente set() questo.

Non è necessario utilizzare la voce Elimina e inserire. Inoltre, quelle funzioni non funzionano quando l'Entry è disabilitato o readonly! Il metodo di variabile del testo, tuttavia, funziona anche in queste condizioni.

import Tkinter as tk 

... 

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

Un modo potrebbe essere quello di ereditare una nuova classe, EntryWithSet, e definendo set metodo che fa uso di delete e insert metodi degli oggetti Entry classe:

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