【问题标题】:Use spinbox values as textvariable for another spinbox (tkinter)使用 spinbox 值作为另一个 spinbox (tkinter) 的文本变量
【发布时间】:2018-04-21 11:51:48
【问题描述】:

我想创建两个旋转框:第一个带有 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()

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

【问题讨论】:

  • 值从 1 到 var1 的 Combobox 是另一种可能的实现。我试过了,但无法让它工作。它仍然是空的。

标签: python python-3.x tkinter tk


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多