【问题标题】:How to move the slider of scale slider with the value of two scale slider with tkinter in Python?python - 如何在Python中使用tkinter的两个刻度滑块的值移动刻度滑块的滑块?
【发布时间】:2019-09-10 10:12:59
【问题描述】:

我想在 Python 中的 tkinter 中制作三个比例滑块,我可以在其中移动前两个滑块,第三个滑块作为前两个滑块值的总和自行移动

我尝试使用以下代码将前两个的值设置为第三个。

from tkinter import *
master = Tk()
#First Scale
w1=Scale(master, from_=0, to=100,orient=HORIZONTAL) 
w1.pack() 
#Second Scale
w2=Scale(master, from_=0, to=200,orient=HORIZONTAL) 
w2.pack() 

#Third Scale where sum has to be shown
w3=Scale(master, from_=0, to=300,orient=HORIZONTAL) 
w3.set(w1.get()+w2.get())
w3.pack() 
mainloop()

预期是移动前两个滑块,第三个滑块将自身移动到前两个滑块值之和的值。

【问题讨论】:

    标签: python tkinter tkinter-scale


    【解决方案1】:

    您可以为前两个Scale 创建两个IntVar 作为变量,然后跟踪更改并设置第三个Scale

    from tkinter import *
    master = Tk()
    #First Scale
    w1_var = IntVar()
    w1=Scale(master, from_=0, to=100, variable=w1_var, orient=HORIZONTAL)
    w1.pack()
    #Second Scale
    w2_var = IntVar()
    w2=Scale(master, from_=0, to=200, variable=w2_var, orient=HORIZONTAL)
    w2.pack()   
    
    #Third Scale where sum has to be shown
    w3=Scale(master, from_=0, to=300,orient=HORIZONTAL,state="disabled")
    w3.pack()
    
    def trace_method(*args):
        w3.config(state="normal")
        w3.set(w1.get() + w2.get())
        w3.config(state="disabled")
    
    w1_var.trace("w", trace_method)
    w2_var.trace("w", trace_method)
    
    master.mainloop()
    

    【讨论】:

    • 还有一件事,我们能不能让第三个秤只在前两个秤移动时才移动。第三个刻度不应手动移动。
    • 当然 - 但您需要创建一个函数来启用/禁用它。
    • 完成了。from tkinter import * master = Tk() w1_var = IntVar() w2_var = IntVar() w3_var = IntVar() w1=Scale(master, from_=0, to=100, variable=w1_var, orient=HORIZONTAL) w1.pack() w2=Scale(master, from_=0, to=200, variable=w2_var, orient=HORIZONTAL) w2.pack() #Third Scale where sum has to be shown w3=Scale(master, from_=0, to=300,variable=w3_var,orient=HORIZONTAL) w1_var.trace("w",lambda *args:w3.set(w1.get()+w2.get())) w2_var.trace("w",lambda *args:w3.set(w1.get()+w2.get())) w3_var.trace("w",lambda *args:w3.set(w1.get()+w2.get())) w3.pack() mainloop()
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多