是否可以使用 tkinter 动态更改秤的"to"值?



我想知道是否有可能动态地改变一个比例的最大值与另一个比例与tkinter。

我有一个有两个刻度的例子,其中第一个刻度是sc_maxVal,变量maxVal是第二个刻度的最大值。

我能够在第一个地方设置它,但我不知道如何改变sc_varto参数,而脚本正在与sc_max运行。

import tkinter as tk

mainApp = tk.Tk()

mainApp.title("Windows")
mainApp.geometry("800x600")

maxVal = tk.DoubleVar()
maxVal.set(20)

var = tk.DoubleVar()
var.set(int(maxVal.get()/2))

sc_max = tk.Scale(mainApp, label= 'maxVal', from_= 10, to= 40, orient= tk.HORIZONTAL, length= 500, variable= maxVal).pack()
sc_var = tk.Scale(mainApp, label= 'var', from_= 1, to= int(maxVal.get()), orient= tk.HORIZONTAL, length= 500, variable= var).pack()

mainApp.mainloop()

你可以配置一个刻度,当它的值改变时调用一个函数。在该函数中,您可以使用configure方法来配置其他刻度。

在创建小部件的同一语句中调用pack也会犯一个非常常见的错误。您需要将它们分开,否则您要分配的变量将被设置为None,因为.pack(...)返回None

注意:command被作为参数传递新值。

def update_scale(new_max):
sc_var.configure(to=new_max)
sc_var = tk.Scale(...)
sc_max = tk.Scale(..., command=update_scale)
sc_var.pack()
sc_max.pack()

您可能想要创建一个while循环并在此期间更新mainApp。然后,你可以在应用程序运行期间更改小部件的属性,而不必让它被事件或其他东西触发。例如,使用:

while True:
try:
mainApp.update()
if you_want_to_change_the_to_value:
sc_var.config(to=your_value)
except tkinter.TclError:
break

代替

mainApp.mainloop()

我在Sylvester Kruin的帮助下找到了解决办法。

主循环必须被替换成这样的东西

while True:
mainApp.update()
if you_want_to_change_the_to_value:
sc_var.config(to=your_value)

我还发现我们必须将sc_var.pack()放入循环中。它给出了脚本

import tkinter as tk
mainApp = tk.Tk()

mainApp.title("Windows")
mainApp.geometry("800x600")

maxVal = tk.DoubleVar()
maxVal.set(40)
changement = int(maxVal.get())
var = tk.DoubleVar()
var.set(int(maxVal.get()/2))

sc_max = tk.Scale(mainApp, label= 'maxVal', from_= 10, to= 40, orient= tk.HORIZONTAL, length= 500, variable= maxVal).pack()
sc_var = tk.Scale(mainApp, label= 'var', from_= 1, to= int(maxVal.get()), orient= tk.HORIZONTAL, length= 500, variable= var)

while True:
sc_var.pack()
mainApp.update()
sc_var.config(to=int(maxVal.get()))

相关内容

最新更新