使用旋转框值作为另一个旋转框的文本变量(tkinter)

Use spinbox values as textvariable for another spinbox (tkinter)

我想创建两个旋转框:第一个 int 从 1 到 20,第二个 int 从 1 到第一个旋转框中的数字。

这是我的:

import tkinter as tk
from tkinter import ttk

mainWin = tk.Tk()

var1 = tk.IntVar()
sp1 = tk.Spinbox(mainWin, from_=1, to=20, textvariable=var1, state="readonly")
sp1.grid()

var2 = tk.IntVar()
sp2= tk.Spinbox(mainWin, from_=1, to=var1.get(), textvariable=var2, state="readonly")
#sp2= tk.Spinbox(mainWin, from_=1, to=int(var1.get()), textvariable=var2, state="readonly") -> Also doesn't work
sp2.grid()

mainWin.mainloop()

第二个旋转框没有任何值。 我尝试了不同的方法,但找不到任何有效的方法。

当您创建 sp2 时,您将值设置为 var1.get(),但要让它随 var1 变化,您必须为其提供一个函数,该函数对 [=] 中的变化做出反应15=]。与按钮一样,您可以指定回调函数:

sp1 = tk.Spinbox( ... , command=callback_function)

此外,如果我将 from_to 设置为相同的值,旋转框似乎无法获取它,所以我在 var1.get() [=25= 时明确设置它] 1.

示例代码:

import tkinter as tk

mainWin = tk.Tk()

def update_sp2(event=None):
    sp2.config(to=var1.get())
    if var1.get() == 1: var2.set(1) # Needed to set spinbox value = 1

var1 = tk.IntVar()
sp1 = tk.Spinbox(mainWin, from_=1, to=20, textvariable=var1, command=update_sp2)
sp1.grid()

var2 = tk.IntVar()
sp2 = tk.Spinbox(mainWin, from_=1, to=1, textvariable=var2)
sp2.grid()
var2.set(1)     # Needed to set spinbox value = 1

mainWin.mainloop()