2010-03-26 34 views
8

Tôi đang cố gắng để kết hợp một biến với một widget nhập Tkinter, trong một cách mà:Làm cách nào để kết nối một biến với tiện ích Entry?

  1. Bất cứ khi nào tôi thay đổi giá trị (các "nội dung") của các mục nhập, chủ yếu bằng cách gõ một cái gì đó vào nó, biến tự động được gán giá trị của những gì tôi đã nhập. Nếu không có tôi phải nhấn một nút "Cập nhật giá trị" hoặc một cái gì đó như thế đầu tiên.

  2. Bất cứ khi nào biến được thay đổi (bởi một số phần khác của chương trình), tôi muốn giá trị mục nhập được hiển thị được điều chỉnh tự động. Tôi tin rằng điều này có thể làm việc thông qua textvariable.

Tôi đọc ví dụ trên http://effbot.org/tkinterbook/entry.htm, nhưng nó không chính xác giúp tôi cho những gì tôi có trong tâm trí. Tôi có cảm giác rằng có một cách để đảm bảo điều kiện đầu tiên bằng cách sử dụng "xác thực" của mục nhập. Bất kỳ ý tưởng?

+2

Có lẽ bạn có thể đề xuất phương án thay thế? :) –

+4

Có gì sai với tkinter? Theo trang chủ trăn, nó là "... Gói GUI tiêu chuẩn de-facto của Python." Và "cái được sử dụng phổ biến nhất". – Sano98

+0

Biến kiểm soát: http://infohost.nmt.edu/tcc/help/pubs/tkinter/control-variables.html –

Trả lời

12

Tôi nghĩ bạn muốn một cái gì đó như thế này. Trong ví dụ bên dưới, tôi đã tạo biến số myvar và gán cho nó là textvariable của cả hai tiện ích LabelEntry. Bằng cách này cả hai đều được ghép đôi và thay đổi trong tiện ích Entry sẽ tự động phản ánh trong Label.

Bạn cũng có thể set trace trên các biến, ví dụ: để viết cho stdout.

from tkinter import * 


root = Tk() 
root.title("MyApp") 

myvar = StringVar() 

def mywarWritten(*args): 
    print "mywarWritten",myvar.get() 

myvar.trace("w", mywarWritten) 

label = Label(root, textvariable=myvar) 
label.pack() 

text_entry = Entry(root, textvariable=myvar) 
text_entry.pack() 

root.mainloop() 
+0

Cảm ơn bạn, điều này đi đúng hướng, nhưng để làm việc với các biến, tôi cần phải chuyển đổi chúng thành các biến python bình thường. Ví dụ của bạn hoạt động vì các tiện ích chia sẻ cùng một văn bản. Nhưng những gì bạn sẽ làm, ví dụ, nếu bạn muốn in nội dung của mục nhập của bạn để sản lượng tiêu chuẩn bất cứ khi nào nó được thay đổi thay vì viết nó trong một nhãn tkinter? – Sano98

+1

Bạn làm điều này: 'text_entry.bind ('', handler)' trong đó 'handler' là hàm gán biến số python của bạn. Xem câu trả lời của tôi. – Paul

+0

@ Sano98, tôi đã chỉnh sửa câu trả lời, bạn có thể dễ dàng theo dõi các biến cho đọc/ghi –

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