基于Tkinter实现动态函数选择、参数输入与结果展示开发需求
Tkinter动态函数选择与参数交互实现
需求说明
- 通过单选框动态选择要执行的函数(function_1或function_2)
- 选择函数后自动生成对应参数输入框:
- 选择function_1时显示Var1、Var2输入框
- 选择function_2时显示Var3、Var4、Var5、Var6输入框
- 参数输入完成后执行对应函数,在界面下方展示生成的DataFrame表格与绘图
现有基础代码
from tkinter import ttk import tkinter as tk root = tk.Tk() root.geometry("800x600") root.config(bg='light blue') root.title('Dashboard') frame = tk.Frame(root, bg='light blue') frame.pack(padx=10, pady=10) file_label = tk.Label(frame, text='Input_File') file_label.grid(row=0, column=0) def function_1(Input_File, Var1, Var2): # 基于输入生成DataFrame表格和绘图 # 示例:返回模拟的DataFrame和绘图数据 import pandas as pd df = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6]}) plot_data = (df['A'], df['B']) return df, plot_data def function_2(Input_File, Var3, Var4, Var5, Var6): # 基于输入生成DataFrame表格和绘图 # 示例:返回模拟的DataFrame和绘图数据 import pandas as pd df = pd.DataFrame({'X': [Var3, Var4], 'Y': [Var5, Var6]}) plot_data = (df['X'], df['Y']) return df, plot_data root.mainloop()
完整实现代码
from tkinter import ttk import tkinter as tk import pandas as pd from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import matplotlib.pyplot as plt root = tk.Tk() root.geometry("800x600") root.config(bg='light blue') root.title('Dashboard') # 全局变量:存储加载的输入文件(可替换为实际文件加载逻辑) Input_File = "sample_data.csv" # 顶部框架:文件信息+函数选择 top_frame = tk.Frame(root, bg='light blue') top_frame.pack(padx=10, pady=10, fill=tk.X) # 文件标签(可扩展为文件选择按钮) file_label = tk.Label(top_frame, text=f'已加载文件: {Input_File}', bg='light blue') file_label.grid(row=0, column=0, padx=5) # 函数选择单选框 func_var = tk.IntVar(value=1) func1_radio = ttk.Radiobutton(top_frame, text="执行function_1", variable=func_var, value=1, command=lambda: update_param_fields()) func1_radio.grid(row=0, column=1, padx=10) func2_radio = ttk.Radiobutton(top_frame, text="执行function_2", variable=func_var, value=2, command=lambda: update_param_fields()) func2_radio.grid(row=0, column=2, padx=10) # 参数输入框架:动态生成输入框 param_frame = tk.Frame(root, bg='light blue') param_frame.pack(padx=10, pady=10, fill=tk.X) param_entries = {} # 存储参数输入框引用 # 结果展示框架:表格+绘图 result_frame = tk.Frame(root, bg='light blue') result_frame.pack(padx=10, pady=10, fill=tk.BOTH, expand=True) # 动态更新参数输入框 def update_param_fields(): # 清空现有参数输入组件 for widget in param_frame.winfo_children(): widget.destroy() param_entries.clear() # 根据选择的函数生成对应输入框 func_choice = func_var.get() params = ["Var1", "Var2"] if func_choice == 1 else ["Var3", "Var4", "Var5", "Var6"] for idx, param in enumerate(params): label = tk.Label(param_frame, text=param, bg='light blue') label.grid(row=0, column=idx*2, padx=5) entry = ttk.Entry(param_frame) entry.grid(row=0, column=idx*2+1, padx=5) param_entries[param] = entry # 添加执行按钮 execute_btn = ttk.Button(param_frame, text="执行函数", command=execute_selected_function) execute_btn.grid(row=0, column=len(params)*2, padx=20) # 执行选中函数并展示结果 def execute_selected_function(): # 清空结果展示区 for widget in result_frame.winfo_children(): widget.destroy() func_choice = func_var.get() try: # 获取参数并调用对应函数 if func_choice == 1: var1 = param_entries["Var1"].get() var2 = param_entries["Var2"].get() df, plot_data = function_1(Input_File, var1, var2) else: var3 = float(param_entries["Var3"].get()) var4 = float(param_entries["Var4"].get()) var5 = float(param_entries["Var5"].get()) var6 = float(param_entries["Var6"].get()) df, plot_data = function_2(Input_File, var3, var4, var5, var6) # 展示DataFrame表格 tree = ttk.Treeview(result_frame) tree['columns'] = list(df.columns) tree['show'] = 'headings' # 设置表头 for col in df.columns: tree.heading(col, text=col) tree.column(col, width=100) # 插入表格数据 for _, row in df.iterrows(): tree.insert("", tk.END, values=list(row)) tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) # 展示Matplotlib绘图 fig, ax = plt.subplots(figsize=(4,3)) ax.plot(plot_data[0], plot_data[1]) ax.set_title("生成图表") canvas = FigureCanvasTkAgg(fig, master=result_frame) canvas.draw() canvas.get_tk_widget().pack(side=tk.RIGHT, fill=tk.BOTH, expand=True) except Exception as e: # 错误提示 error_label = tk.Label(result_frame, text=f"执行出错: {str(e)}", bg='light blue', fg='red') error_label.pack() # 初始化参数输入框 update_param_fields() root.mainloop()
代码说明
- 用
func_var绑定单选框状态,选择变化时触发update_param_fields()动态生成对应参数输入框 param_entries字典存储输入框引用,方便后续获取用户输入的参数值execute_selected_function()负责参数校验、函数调用,并通过ttk.Treeview展示DataFrame,用Matplotlib嵌入Tkinter展示绘图- 加入异常处理,避免参数格式错误导致程序崩溃
内容的提问来源于stack exchange,提问作者Add
相关产品推荐
相关产品推荐

