laiyuanjie 发表于 2024-5-23 14:44:40

怎样实时设置Intvar的值

如图,怎么设置总和的这个Entry关联的这个Intvar,,让它能实时获取上面两个框里输入的值,然后相加,,比如现在的状况是90,和0,那么总和的这个框就实时自动变成90,,如果我后续把0改成5,那么总和就自动马上变成95

FishC 发表于 2024-5-23 14:45:12

你可以使用Tkinter中的绑定方法来实现实时更新IntVar的值。以下是一个示例代码:

import tkinter as tk

def update_total():
    # 获取两个框里的值并相加
    total = var1.get() + var2.get()
    # 更新总和的Entry框
    var_total.set(total)

root = tk.Tk()

# 创建两个输入框和一个总和的输出框
var1 = tk.IntVar()
entry1 = tk.Entry(root, textvariable=var1)
entry1.pack()

var2 = tk.IntVar()
entry2 = tk.Entry(root, textvariable=var2)
entry2.pack()

var_total = tk.IntVar()
entry_total = tk.Entry(root, textvariable=var_total)
entry_total.pack()

# 绑定更新方法,使得每次输入框的值发生变化时都调用update_total方法
var1.trace("w", lambda name, index, mode: update_total())
var2.trace("w", lambda name, index, mode: update_total())

root.mainloop()

在上面的代码中,我们创建了两个输入框(entry1和entry2)和一个用于显示总和的输出框(entry_total)。我们使用IntVar来保存输入框的值,并使用textvariable参数将它们与对应的输入框关联起来。

然后,我们定义了一个update_total函数,该函数在每次输入框的值发生变化时被调用。它获取两个输入框的值,并计算它们的总和。然后,它使用set方法将计算结果更新到var_total变量中,从而更新总和的输入框。

最后,我们使用trace方法来绑定更新方法。当var1或var2的值发生变化时("w"表示写入模式),将自动调用update_total方法。这样,每当你更改输入框的值时,总和的输入框将实时更新。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

laiyuanjie 发表于 2024-5-23 14:47:50

FishC 发表于 2024-5-23 14:45
你可以使用Tkinter中的绑定方法来实现实时更新IntVar的值。以下是一个示例代码:




其他的我都懂,,这两个我照超就可以了是不是?

var1.trace("w", lambda name, index, mode: update_total())
var2.trace("w", lambda name, index, mode: update_total())

FishC 发表于 2024-5-23 14:48:05

laiyuanjie 发表于 2024-05-23 14:47
其他的我都懂,,这两个我照超就可以了是不是?

va ...

是的,你可以直接按照我的代码示例中的写法来使用这两行代码。它们的作用是将update_total方法与var1和var2的变化进行绑定,当它们的值发生变化时自动调用update_total方法。这样,每次你改变输入框的值时,总和的输入框都会实时更新。如果你按照我给出的示例代码来编写,这两行代码应该能够正常工作。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

laiyuanjie 发表于 2024-5-23 14:59:44

FishC 发表于 2024-5-23 14:48
是的,你可以直接按照我的代码示例中的写法来使用这两行代码。它们的作用是将update_total方法与var1和 ...

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 508, in get
    return self._tk.getint(value)
_tkinter.TclError: expected integer but got ""

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
File "C:\Users\Administrator\PycharmProjects\Baohui_Attendance\views.py", line 625, in <lambda>
    self.var_change_less_late_minute.trace("w", lambda name, index, mode: self.fun_update_total_late_minute())
File "C:\Users\Administrator\PycharmProjects\Baohui_Attendance\views.py", line 586, in fun_update_total_late_minute
    self.change_total_late_minute = self.var_change_less_late_minute.get() + self.var_change_beyond_late_minute.get()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 510, in get
    return int(self._tk.getdouble(value))
_tkinter.TclError: expected floating-point number but got ""


我自己的代码,功能是能实现,,但是有这个报错

FishC 发表于 2024-5-23 15:01:16

laiyuanjie 发表于 2024-05-23 14:59
Exception in Tkinter callback
Traceback (most rec ...

这个报错提示是因为你正在试图将一个空字符串转换为整数或浮点数。它发生在调用 `get()` 方法时,说明输入框的值为空。

你可以通过添加一些输入验证来避免这个错误。可以在 `fun_update_total_late_minute()` 方法中加入判断语句,检查输入框的值是否为空,如果为空则将相应的变量设置为0。

下面是修改后的代码示例:

import tkinter as tk

def fun_update_total_late_minute():
    # 获取输入框的值并进行非空验证
    less_late_minute = self.var_change_less_late_minute.get()
    beyond_late_minute = self.var_change_beyond_late_minute.get()
   
    if less_late_minute == "":
      less_late_minute = 0
   
    if beyond_late_minute == "":
      beyond_late_minute = 0

    # 计算总和
    self.change_total_late_minute = int(less_late_minute) + int(beyond_late_minute)
    # 更新总和的显示
    self.total_late_minute_entry.delete(0, tk.END)
    self.total_late_minute_entry.insert(tk.END, str(self.change_total_late_minute))

root = tk.Tk()

self.var_change_less_late_minute = tk.StringVar()
self.var_change_beyond_late_minute = tk.StringVar()

less_late_minute_entry = tk.Entry(root, textvariable=self.var_change_less_late_minute)
less_late_minute_entry.pack()

beyond_late_minute_entry = tk.Entry(root, textvariable=self.var_change_beyond_late_minute)
beyond_late_minute_entry.pack()

self.total_late_minute_entry = tk.Entry(root)
self.total_late_minute_entry.pack()

self.var_change_less_late_minute.trace("w", lambda name, index, mode: self.fun_update_total_late_minute())
self.var_change_beyond_late_minute.trace("w", lambda name, index, mode: self.fun_update_total_late_minute())

root.mainloop()

在修改后的代码中,我们首先检查输入框的值是否为空,如果为空则将其设置为0。然后再进行计算和更新操作。

这样就能避免由于空值导致的类型错误了。希望这次能解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

laiyuanjie 发表于 2024-5-23 15:03:09

FishC 发表于 2024-5-23 15:01
这个报错提示是因为你正在试图将一个空字符串转换为整数或浮点数。它发生在调用 `get()` 方法时,说明 ...

如果忽略这个错误,会有什么影响

FishC 发表于 2024-5-23 15:03:23

laiyuanjie 发表于 2024-05-23 15:03
如果忽略这个错误,会有什么影响

如果忽略这个错误,可能会导致程序在对空字符串执行算术运算时抛出异常。这样,程序将停止执行并显示错误消息。

此外,忽略错误可能会导致意外的结果。例如,如果输入框的值为空,但你期望在计算总和时将其视为0,则忽略错误可能会导致计算出不正确的总和。

因此,为了确保程序的稳定性和正确性,建议在进行数值计算之前始终检查输入框的值是否为空,并采取适当的措施进行处理。这样可以避免潜在的错误和异常情况。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 怎样实时设置Intvar的值