방금 tkinter를 배우기 시작했으며 ttk.Label
의 변수를 textvariable=
또는 text=
으로 즉시 조작 할 수 있는지 알고 싶습니다. 설명하기 위해, 두 숫자를 곱하고 제품 :tkinter : textvariable을 사용하는 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
이 내 변수를 표시하지만 어떤 식 으로든 조작 할 수 있는지 여부입니다.
newvariable = DoubleVar()
다음 thusly 히 내 multiply
기능을 업데이트 : 이제 내 제품을 가지고 나는 단순히 새로운 변수를 만들 수 있습니다 알고 2.
하여 곱 미친 듯이 일을하고 싶어한다고 가정 해 봅시다
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'와 'INT'내가 가지고 내가 할 수 있도록하고 싶습니다 무엇
뭔가처럼 그하면 textVariable 만 1 개 변수를 원하고 그것을 조작하지 않는 것을 의미합니다
나는 또한 시도 :..
ttk.Label(mainframe, text=(product.get()*2)).grid(column=1, row = 5)
하나가 실패하지 않는, 그러나 또한 자동으로 업데이트되지 않습니다 (즉,이다 전체적으로 우리는 원래 textvariable
이 필요합니까?)
원래 변수를 조작하려는 다른 인스턴스마다 새 변수를 만들지 않고도이 작업을 수행 할 수 있습니까?
도움 주셔서 감사합니다.
어느 쪽이든, 레이블에 표시 할 새 변수를 만들어야하는 것처럼 보입니다. 예를 들어, 위 예제에서 num1 = 2, num2 = 3이면 product = 6입니다. 하나의 레이블에'product'를, 다른 레이블에'product * 5'를 동시에 표시하고 싶다면 그렇게 할 수 없습니다 'product * 5'를 표현하기위한 새로운 변수를 생성하지 않아도된다. – Floydius
@Floydius : 정확합니다. 새 변수를 만들어야합니다. 위젯을 표현식에 연결할 수 없으며 위젯 만 변수와 연결할 수 있습니다. –
나는 그것에 대해 틀렸다는 희망을 갖고 있었지만, 적어도 내 주위에 구글 방식으로 노력하는 것을 그만 둘 수 있었다. 도움에 너무 감사한다. – Floydius