将spinbox值用作另一个spinbox的文本变量(tkinter)

时间:2018-04-21 11:51:48

标签: python python-3.x tkinter tk

我想创建两个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没有任何价值。 我尝试了不同的方式,但我找不到任何有用的方法。

1 个答案:

答案 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()