You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:17:50