我想创建两个spinbox:第一个用 int 从1到20,第二个用 int 从1到第一个spinbox中的数字。< / p>
这就是我所拥有的:
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()
第二个spinbox没有任何价值。 我尝试了不同的方式,但我找不到任何有用的方法。
答案 0 :(得分:1)
创建sp2
时,您将值设置为var1.get()
,但要将其更改为var1
,您必须为其提供一个对sp1
中的更改做出反应的函数}。与按钮一样,您可以指定回调函数:
sp1 = tk.Spinbox( ... , command=callback_function)
此外,如果我将from_
和to
设置为相同的值,则旋转框似乎不会得到它,所以每当var1.get()
返回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()