2010-11-19 13 views
5

Chciałbym wiedzieć jak (jeśli to możliwe) usłyszeć określoną frazę lub słowo wprowadzone w polu tekstowym i uruchomić polecenie.Python Tkinter słuchacz w polu tekstowym

Na przykład, gdy wpisuję frazę "turn me red", chciałbym wiedzieć, czy można go zmienić na czerwony bez naciskania enter.

Właśnie rozpoczął i oto co mam:

from Tkinter import * 

class mywidgets: 
    def __init__(self,root): 
     frame=Frame(root) 
     frame.pack() 
     self.txtfr(frame) 
     return 

    def txtfr(self,frame): 

     #define a new frame and put a text area in it 
     textfr=Frame(frame) 
     self.text=Text(textfr,height=10,width=50,background='white') 

     # put a scroll bar in the frame 
     scroll=Scrollbar(textfr) 
     self.text.configure(yscrollcommand=scroll.set) 

     #pack everything 
     self.text.pack(side=LEFT) 
     scroll.pack(side=RIGHT,fill=Y) 
     textfr.pack(side=TOP) 
     return 
def main(): 
    root = Tk() 
    s=mywidgets(root) 
    root.title('textarea') 
    root.mainloop() 
main() 
+0

ktoś wie co robić? – DonJuma

Odpowiedz

4

więc pomyślałem, że byłoby trochę czystsze jeśli zamiast edytować kod, tylko pod warunkiem, świeży przykład kodu, który wykazuje zachowanie jesteś zainteresowany pracą

Oto co robi poniższy kod gdy, np. uruchomisz go, dostaniesz mały widżet z pustym polem tekstowym (technicznie, Etykieta w Tkinter), aby użytkownik podał jakąś wartość. Gdy wprowadzą wartość liczbową (całkowitą lub zmiennoprzecinkową), a następnie klikną przycisk Calculate, wówczas odpowiednia wartość w metrach pojawi się tuż poniżej. Jeśli jednak klawisze użytkownika są oznaczone jako "czerwony", to po wpisaniu słowa "niebieski" pojawi się, tj. Niebieski, pojawi się, mimo że kliknięty został przycisk Calculate ani nic innego.

Jak widać na przedostatniej linijce poniżej, uzyskanie pożądanego zachowania jest tylko kwestią opisania pożądanego zachowania w składni zdarzeń Tkinter .

from Tkinter import * 
import ttk 

root = Tk() 

def calculate(*args) : 
    value = float(feet.get()) 
    meters.set((0.305 * value * 10000. + .5)/10000.) 

def callback_function(*args) : 
    meters.set('blue') 

mf = ttk.Frame(root, padding="3 3 12 12") 
mf.grid(column=0, row=0, sticky=(N, W, E, S)) 
mf.columnconfigure(0, weight=1) 
mf.rowconfigure(0, weight=1) 

feet = StringVar() 
meters = StringVar() 

feet_entry = ttk.Entry(mf, width=7, textvariable=feet) 
feet_entry.grid(column=2, row=1, sticky=(W, E)) 

ttk.Label(mf, textvariable=meters, background='#E9D66B').grid(column=2, 
      row=2, sticky=(W, E)) 

ttk.Button(mf, text="Calculate", command=calculate).grid(column=2,row=3, 
      sticky=W) 

ttk.Label(mf, text="feet").grid(column=3, row=1, sticky=W) 
ttk.Label(mf, text="is equivalent to").grid(column=1, row=2, sticky=E) 
ttk.Label(mf, text="meters").grid(column=3, row=2, sticky=W) 

for child in mf.winfo_children(): 
    child.grid_configure(padx=5, pady=5) 

feet_entry.focus() 
root.bind('<Return>', calculate) 

# this is the key line 
root.bind('red', callback_function) 

root.mainloop() 
+0

Jestem na oknach i mówi, że nie może znaleźć ttk. Czy to pochodzi z python. Przeszukałem go, ale znalazłem tylko Linuksa? KORZYSTANIE Z PYTHON V 2.6 – DonJuma

+0

po prostu się go pozbyć - to znaczy zastąpić każde wystąpienie "ttk". z '' (i oczywiście usuń import ttk linii). – doug

+0

Oh OK, świetnie, dziękuję bardzo. – DonJuma

1

Co chcesz, jest z pewnością możliwe. Rozwiązanie zależy od tego, czego naprawdę chcesz.

Czy chcesz zmienić kolor na czerwony tylko wtedy, gdy użytkownik wpisze "dokładnie mnie na czerwono"? Lub, jeśli tekst jest "zmieniaj mnie na niebieski" i zmieniają słowo "niebieski" na "czerwony", czy to spowoduje działanie?

Jeśli pierwsza (musi wpisać dokładnie "obróć mnie na czerwono"), możesz po prostu związać się z tą dokładną sekwencją (np .: widget.bind("<t><u><r><n><space><m><e>....", doSomething)). Jednakże niemożliwe staje się zarządzanie, jeśli chcesz również "Turn ME Red", aby zrobić to samo.

Jeśli ta ostatnia (za każdym razem, gdy wpiszesz coś, aby zobaczyć, czy "obrócić czerwony" otacza punkt wstawiania), to trochę więcej pracy. Możesz związać się z <KeyRelease>, a następnie spojrzeć na znaki przed punktem wstawienia magicznej frazy.

Podsumowując, ustawiasz powiązanie na coś generycznego, takiego jak <KeyRelease>, a następnie podejmujesz decyzję w wywołaniu zwrotnym lub ustawiasz bardzo specyficzne wiązanie dla dokładnej frazy.

+0

jak byś poszła o jest przykład, do którego możesz się odwołać, ponieważ możesz powiedzieć, że jestem całkiem nowy. – DonJuma

Powiązane problemy