元组数字输入求均值失败及Tkinter数组求均值功能异常问题求助
Hey there! Let's work through your two tech issues step by step—both are rooted in a similar mistake, so fixing one will help resolve the other.
1. Fixing the Tkinter Array/Average Feature
Your core issue here is that you're storing the Tkinter IntVar object itself (as a string) in your array, not the actual numeric value from the input box. When you run str(v41), you get the internal identifier of the variable (like PY_VAR0) instead of the number you typed—this is exactly why your float conversion fails later.
Corrected Code
import tkinter from tkinter import * root = Tk() root.geometry('500x100') v41 = IntVar() avg_time_bars = [] def bars1_1_1_4(): # Get the actual numeric value from the input variable input_num = v41.get() avg_time_bars.append(input_num) # Calculate average safely if avg_time_bars: r_bars1_1_1_4 = sum(avg_time_bars) / len(avg_time_bars) else: r_bars1_1_1_4 = '-' # Debug prints to verify functionality print(f"Input value: {input_num}") print(f"Stored values: {avg_time_bars}") print(f"Current average: {r_bars1_1_1_4}") # Optional: Clear input box for next entry v41.set(0) b_bars1_1_1_4 = Button(root, text='Add', command=bars1_1_1_4) b_bars1_1_1_4.grid(row=16, column=3) e_bars1_1_1_4 = Entry(root, textvariable=v41) e_bars1_1_1_4.grid(row=16, column=4) root.mainloop()
Key Fixes:
- Use
v41.get()to retrieve the actual integer value from the input field, instead of converting the variable object to a string - Store numeric values directly in the array, so no messy string-to-float conversion is needed later
- Added an optional step to clear the input box after adding a value, making the program more user-friendly
2. Resolving the Tuple Average ValueError
The error ValueError: could not convert string to float: 'PY_VAR0' tells me you made the same mistake here: you stored the Tkinter variable object (as a string) in the tuple, not the numeric value. Even though tuples are immutable, storing the wrong type of data will break your average calculation.
Solution Example:
# ❌ Wrong: Storing the variable object's string representation bad_tuple = (str(v41),) # ✅ Correct: Storing the actual numeric value good_tuple = (v41.get(),) # Calculate average for the tuple if good_tuple: average = sum(good_tuple) / len(good_tuple) else: average = '-'
Always ensure you're storing actual numbers (integers/floats) in your tuple, not references to Tkinter variable objects.
内容的提问来源于stack exchange,提问作者valeri valkanov

