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

Tkinter商品信息查询工具:CSV描述数据显示错误问题排查

商品信息查询工具问题排查与修复

问题描述

使用csv和tkinter开发商品信息查询工具,搜索功能可运行,但描述数据显示异常:输入条码搜索后,标签仅显示pice,无法正确展示商品的Test描述,价格显示正常。怀疑问题出在find函数的条码匹配循环(原代码第26-30行),但无法写出正确代码。

原代码

import csv
import tkinter
from tkinter import *

CsvFile = "products.csv"

main = Tk()
main.geometry('500x500')

Entry1 = Entry(main, width = 20)
Entry1.pack()

lbl = Label(main, text = "a")
lbl.pack()
lb2 = Label(main, text = "a")
lb2.pack()
lb3 = Label(main, text = "a")
lb3.pack()

def find():
    with open(CsvFile) as csvcsv:
        reader = csv.DictReader(csvcsv)
        barcode = Entry1.get()
        for row in reader:
            if barcode == row['barcode1']:
                for desc, pice in row.items():
                    lbl.config(text = desc)
                    lb2.config(text = pice)
                break
            else:
                lbl.config(text='This Product is currently unavailable')


Button(main, text='search', command = find).place(x=100, y=170)

main.mainloop()

CSV文件内容

barcode    desc   pice
1111111    Test   $5.00

问题分析

  1. 字段名不匹配:CSV表头为barcode,但代码中用row['barcode1']做匹配,直接导致条码匹配逻辑失效。
  2. 字段遍历逻辑错误:找到匹配行后,通过for desc, pice in row.items()遍历所有字段,会循环覆盖标签内容。最后一次循环会把描述标签设为字段名pice,价格标签设为$5.00,这就是描述显示异常的原因。
  3. 错误提示时机错误:原代码每遍历一行不匹配就更新提示,会导致还没遍历完所有行就提前显示“商品不可用”。

修正后的代码

import csv
import tkinter
from tkinter import *

CsvFile = "products.csv"

main = Tk()
main.geometry('500x500')

Entry1 = Entry(main, width=20)
Entry1.pack()

# 明确标签用途,设置初始文本
lbl_desc = Label(main, text="商品描述:")
lbl_desc.pack()
lbl_price = Label(main, text="商品价格:")
lbl_price.pack()
lbl_status = Label(main, text="")
lbl_status.pack()

def find():
    # 重置状态提示
    lbl_status.config(text="")
    barcode = Entry1.get().strip()  # 去除输入首尾空格
    found = False
    
    # 处理CSV分隔符:Excel保存的空格分隔文件需指定delimiter=' ',若为制表符则用delimiter='\t'
    with open(CsvFile, newline='', encoding='utf-8') as csvfile:
        reader = csv.DictReader(csvfile, delimiter=' ')
        for row in reader:
            # 匹配正确的字段名barcode,同时去除内容空格
            if barcode == row['barcode'].strip():
                # 直接通过字段名获取对应值
                lbl_desc.config(text=f"商品描述:{row['desc'].strip()}")
                lbl_price.config(text=f"商品价格:{row['pice'].strip()}")
                found = True
                break
    
    # 遍历完成后统一判断是否找到商品
    if not found:
        lbl_status.config(text='该商品目前无库存')
        # 重置描述和价格标签
        lbl_desc.config(text="商品描述:")
        lbl_price.config(text="商品价格:")

Button(main, text='搜索', command=find).place(x=100, y=170)

main.mainloop()

关键修复点

  • 修正字段名匹配:将row['barcode1']改为row['barcode'],与CSV表头保持一致。
  • 移除错误的字段遍历循环:直接通过字段名row['desc']和row['pice']获取对应值,避免循环覆盖标签。
  • 调整错误提示逻辑:先标记是否找到商品,遍历完所有行后再显示提示,避免提前触发错误信息。
  • 处理空格问题:用strip()去除输入和CSV内容的首尾空格,防止因空格导致匹配失败。
  • 优化标签可读性:给标签明确命名并设置初始文本,提升界面清晰度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:50:45