2010-11-19 33 views
5

Tôi muốn biết cách (Nếu có thể) để nghe một cụm từ hoặc từ nào đó được nhập vào một hộp văn bản và chạy lệnh.Trình nghe Tkinter Python trong hộp văn bản

Ví dụ: nếu tôi nhập cụm từ "chuyển sang màu đỏ", tôi muốn biết nếu có thể chuyển sang màu đỏ mà không nhấn enter.

Tôi chỉ mới bắt đầu và đây là những gì tôi có:

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

bất kỳ ai biết phải làm gì? – DonJuma

Trả lời

4

Vì vậy, tôi nghĩ rằng nó sẽ là một chút bụi nếu thay vì chỉnh sửa mã của bạn, tôi chỉ cần cung cấp một ví dụ mã mới mà thể hiện hành vi mà bạn quan tâm đến làm việc

Đây là những gì mã dưới đây không:. Khi bạn chạy nó, bạn nhận được một widget nhỏ với một hộp văn bản trống (về mặt kỹ thuật, một nhãn hiệu Nhãn trong Tkinter) để người dùng cung cấp một số giá trị. Khi họ nhập một giá trị số (số nguyên hoặc phao) và sau đó nhấp vào nút Tính toán thì giá trị tương đương tính bằng mét sẽ xuất hiện ngay bên dưới. Nếu tuy nhiên, người dùng nhập 'đỏ' thì từ 'xanh' xuất hiện ngay khi được nhập - tức là, Xanh sẽ xuất hiện mặc dù nút Tính toán cũng không phải bất kỳ điều gì khác được nhấp.

Như bạn có thể thấy trong đường áp chót bên dưới, nhận hành vi bạn muốn chỉ là vấn đề mô tả hành vi bạn muốn trong cú pháp sự kiện Tkinter 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

Tôi đang ở trên các cửa sổ và nó nói rằng nó không thể tìm thấy ttk. Điều này đi kèm với python. Tôi googled nó nhưng chỉ tìm thấy công cụ Linux? SỬ DỤNG PYTHON V 2.6 – DonJuma

+0

chỉ cần loại bỏ nó sau đó - tức là, thay thế mọi lần xuất hiện của 'ttk'. với '' (và rõ ràng là xóa dòng nhập ttk). – doug

+0

Oh okay tuyệt vời nó làm việc cảm ơn rất nhiều. – DonJuma

1

gì bạn muốn chắc chắn là có thể. Giải pháp phụ thuộc vào những gì bạn thực sự muốn.

Bạn có muốn chuyển sang màu đỏ chỉ khi người dùng nhập "chuyển sang màu đỏ" chính xác không? Hoặc, nếu văn bản là "biến tôi xanh" và họ thay đổi từ "xanh" thành "đỏ", điều đó sẽ kích hoạt hành động?

Nếu trước đây (phải nhập chính xác "chuyển sang màu đỏ"), bạn chỉ có thể liên kết với chuỗi chính xác đó (ví dụ: widget.bind("<t><u><r><n><space><m><e>....", doSomething)). Nó trở thành không thể quản lý, tuy nhiên, nếu bạn cũng muốn "Turn ME Red" để làm điều tương tự.

Nếu sau này (bất cứ khi nào bạn gõ bất cứ điều gì nó trông để xem nếu "biến nó màu đỏ" bao quanh điểm chèn), đó là một công việc nhỏ hơn một chút. Bạn có thể liên kết trên <KeyRelease> và sau đó xem các ký tự trước điểm chèn cho cụm từ ma thuật.

Điểm mấu chốt là, bạn thiết lập một ràng buộc hoặc trên một cái gì đó chung chung như <KeyRelease> sau đó đưa ra quyết định trong gọi lại, hoặc thiết lập một ràng buộc rất cụ thể cho một cụm từ chính xác.

+0

làm thế nào bạn sẽ đi về là có một ví dụ mà bạn có thể liên kết đến bởi vì như bạn có thể nói im khá mới. – DonJuma

Các vấn đề liên quan