【问题标题】:Python (tkinter) entry variablePython (tkinter) 入口变量
【发布时间】:2015-11-15 08:37:28
【问题描述】:

我正在 tkinter 中编写一些程序,但遇到了一个问题。

在 tkinter 条目中,如果我在两个条目中输入 1 个文本变量名称,它将立即在两个条目上显示,如下所示:

但我想右输入立即乘以 500。 所以如果我把 2 放在左边,它应该在右边显示 1000。

Label(frame2, foreground="#E3AAD5", text="500e").grid(row=0, column=0, sticky=W, padx=10) # Kreira label (opis kućice pokraj) 
    v_500 = IntVar()
    _500 = Entry(frame2, textvariable=v_500)
    _500.grid(row=0, column=1, sticky=W)

    Entry(frame2, textvariable=v_500*500).grid(row=0, column=2, sticky=W)

但它不起作用。

【问题讨论】:

  • TypeError: *: 'instance' 和 'int' 的操作数类型不受支持
  • 我认为你必须使用validatecommand

标签: python variables tkinter label tkinter-entry


【解决方案1】:

没有直接支持你想要的东西。话虽这么说,你想做的事情相当容易。 IntVars 可以配置为在更改时调用函数。您可以使用此回调进行乘法运算并更新小部件。

例如:

def update_other_label(name1, name2, mode):
    value = v_500.get()
    product = value * 500
    v_500_mult.set(product)

v_500 = IntVar()
v_500.trace("w", update_other_label)
v_500_mult = Intvar()
...
_500 = Entry(frame2, textvariable=v_500)
Entry(frame2, textvariable=v_500_mult).grid(row=0, column=2, sticky=W)

如果您不想要,您不必为第二个条目使用IntVar——如果您保留参考,您可以直接修改条目小部件。我没有那样做,因为你没有保留参考。

【讨论】:

  • @CheckThisOut:这就是 Tkinter 所需要的。它允许您对多个变量和模式使用相同的回调,并知道哪个变量和哪个模式触发了回调。
  • 好的,谢谢。但是如果我有更多的变量用于乘法,而不仅仅是 500。我需要将 10 个变量与 1 个定义相乘。我不想弄乱 vars 因为它是用于计数的程序。
猜你喜欢
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 2016-06-10
  • 2023-03-27
  • 2012-07-18
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多