我剛剛開始學習tkinter,並想知道是否可以在ttk.Label
中動態調用textvariable=
或text=
中的變量。爲了演示,看哪,我這兩個數相乘,顯示產品:tkinter:使用文本變量在tk.Label中操作變量
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Multiplier")
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
## Calculation
def multiply(*args):
try:
product.set(round(float(num1.get())*float(num2.get()),2))
except ValueError:
pass
## variables
num1 = StringVar()
num2 = StringVar()
product = DoubleVar()
## first number
ttk.Label(mainframe, text="First Number:").grid(column = 1, row = 1)
num1_entry = ttk.Entry(mainframe, width=4, textvariable=num1)
num1_entry.grid(column = 2, row = 1)
num1_entry.bind('<KeyPress>', multiply)
num1_entry.bind('<KeyRelease>', multiply)
## second number
ttk.Label(mainframe, text="Second Number:").grid(column = 1, row = 2)
num2_entry = ttk.Entry(mainframe, width=4, textvariable=num2)
num2_entry.grid(column = 2, row = 2)
num2_entry.bind('<KeyPress>',multiply)
num2_entry.bind('<KeyRelease>',multiply)
## display results
ttk.Label(mainframe, text = "Product:").grid(column = 1, row = 3)
ttk.Label(mainframe, textvariable=product).grid(column = 2, row = 3)
root.mainloop()
每當product
通過使用textvariable=product
改變了我可以更新的結果巧妙的計算器程序。每當num1
或num2
通過綁定到<KeyPress>
和<KeyRelease>
而更改時,我可以更新product
。到現在爲止還挺好。
我想知道的是是否可以有另一個ttk.Label
顯示我的變量,但以某種方式操縱。比方說,我想做一些瘋狂的喜歡把我的產品,並通過2
乘它,我知道我可以簡單地創建一個新的變量:
newvariable = DoubleVar()
則正是如此更新我multiply
功能:
def multiply(*args):
try:
product.set(round(float(num1.get())*float(num2.get()),2))
newvariable.set(round(product.get()*2),2))
except ValueError:
pass
,並添加我的新標籤:
ttk.Label(mainframe, textvariable=newvariable).grid(column=1, row = 5)
,解決這個問題很好。我有一個新標籤,顯示了我的原始產品* 2,並且隨着我的條目發生更改,它也隨時更新。這正是我想要的。
但是在我的實際項目中,我需要用不同的參數來完成這個過程。如果我不需要,添加大量新變量似乎很乏味。
我想什麼,能夠做的是一樣的東西:
ttk.Label(mainframe, textvariable=product*2).grid(column=1, row = 5)
這給了我「類型錯誤:不支持的操作類型爲*:‘DoubleVar’和‘廉政’我走這意味着textvariable只想要1個變量,不希望它操縱
我也試過:。
ttk.Label(mainframe, text=(product.get()*2)).grid(column=1, row = 5)
一個不失敗,但它也不會自動更新(這就是整個reas我們需要textvariable
在第一個地方,對嗎?)
是否有可能做到這一點,而不是創建一個新的變量爲每個不同的實例,我想操縱我的原始變量?
感謝您的幫助!
無論哪種方式,它似乎我被迫創建一個新的變量顯示在標籤。例如,在上面的例子中,如果我有num1 = 2和num2 = 3,那麼product = 6。如果我想同時在一個標籤中顯示'product',在另一個標籤中同時顯示'product * 5',我不能這樣做而不需要創建一個新的變量來表示'product * 5'。 – Floydius 2012-03-16 16:26:44
@Floydius:你是對的,你必須創建一個新的變量。您無法將窗口小部件與表達式關聯,只能將窗口小部件與變量相關聯。 – 2012-03-17 01:41:04
我一直希望自己錯了,但至少我可以停止嘗試谷歌我的方式...非常感謝您的幫助! – Floydius 2012-03-19 17:21:22