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

如何实现Python银行交易分类的间歇性GUI下拉选择功能?

实现按需弹出的Tkinter类别选择弹窗

完全可以用Tkinter实现这种「按需调用、用完即关」的弹窗,不用把它当成持续运行的前端。核心是写一个独立的函数,仅在需要用户输入时创建临时窗口,获取选择后立即销毁窗口并返回结果,不干扰主程序的批处理流程。

示例代码实现

import pandas as pd
import tkinter as tk
from tkinter import ttk

# 预定义类别列表和交易-类别匹配字典
CATEGORIES = ["旅行", "居家", "娱乐", "汽车", "餐饮", "购物", "其他"]
TRANSACTION_CATEGORY_MAP = {
    "XX超市": "购物",
    "XX加油站": "汽车",
    "XX餐厅": "餐饮"
}

def get_category_from_user(transaction_description):
    """弹出下拉菜单让用户选择交易类别,返回选择结果"""
    # 创建临时窗口
    root = tk.Tk()
    root.title("选择交易类别")
    root.geometry("350x150")
    root.resizable(False, False)

    # 显示当前待分类的交易描述
    desc_label = ttk.Label(root, text=f"交易描述:{transaction_description}")
    desc_label.pack(pady=10)

    # 创建下拉选择框
    selected_category = tk.StringVar(value=CATEGORIES[0])
    category_combo = ttk.Combobox(root, textvariable=selected_category, values=CATEGORIES, state="readonly")
    category_combo.pack(pady=5)

    # 确认按钮逻辑:保存选择并关闭窗口
    def on_confirm():
        root.quit()  # 终止主循环
        root.destroy()  # 销毁窗口

    confirm_btn = ttk.Button(root, text="确认", command=on_confirm)
    confirm_btn.pack(pady=10)

    # 等待用户操作,直到窗口被关闭
    root.mainloop()
    return selected_category.get()

# 处理CSV交易数据的主逻辑
def process_bank_transactions(csv_path):
    df = pd.read_csv(csv_path)
    # 假设CSV有"交易描述"和"类别"列
    df["类别"] = df["交易描述"].apply(lambda desc: 
        TRANSACTION_CATEGORY_MAP.get(desc, get_category_from_user(desc))
    )
    # 后续处理:保存结果等
    df.to_csv("分类后的交易数据.csv", index=False)

# 调用示例
if __name__ == "__main__":
    process_bank_transactions("银行交易记录.csv")

关键说明

  • 每次调用get_category_from_user时,都会创建一个全新的Tkinter窗口,用户选择完成后窗口立即销毁,不会在后台残留。
  • 使用root.mainloop()阻塞函数执行,直到用户点击确认按钮,确保函数在获取用户输入后才返回结果。
  • 下拉框设置为state="readonly",避免用户输入无效类别,保证分类的规范性。
  • 可以根据需求调整窗口大小、类别列表,甚至添加「新增类别」的输入框(比如在下拉框选「其他」时弹出输入框让用户自定义类别)。

内容的提问来源于stack exchange,提问作者randy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:55:53