2013-05-04 10 views
8

Ich versuche, den Text eines Eintrags mithilfe einer Schaltfläche in einer GUI mit Tkinter festlegen. Diese GUI soll mir helfen, Tausende von Wörtern zu klassifizieren. in fünf Kategorien hat jede der Kategorien eine Schaltfläche. Ich hatte gehofft, dass die Verwendung eines Knopfes mich erheblich beschleunigen würde und ich möchte jedes Mal die Wörter überprüfen, sonst würde ich einfach den Knopf benutzen und die GUI das aktuelle Wort verarbeiten lassen und das nächste Wort bringen. Die Befehlsschaltflächen verhalten sich aus irgendeinem Grund nicht wie gewünscht. Dies ist ein BeispielLegen Sie den Text eines Eintrags mit einer Schaltfläche 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() 

so weit, wenn ich in der Lage bin der Klick tut nichts zu kompilieren.

Antwort

25

Möglicherweise möchten Sie insert Methode verwenden.

Dieses Skript fügt einen Text in Entry ein. Der eingegebene Text kann unter command Parameter des Buttons geändert werden.

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

Wenn Sie einen "Textvariablen" verwenden tk.StringVar(), können Sie einfach set() das.

Keine Notwendigkeit, den Eintrag zu verwenden, löschen und einfügen. Außerdem funktionieren diese Funktionen nicht, wenn der Eintrag deaktiviert oder schreibgeschützt ist! Die Textvariablenmethode funktioniert jedoch auch unter diesen Bedingungen.

import Tkinter as tk 

... 

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

Eine Möglichkeit wäre, eine neue Klasse erben, EntryWithSet und die Definition set Methode, die Verwendung von delete und insert Methoden der Entry Klassenobjekten macht:

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