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

如何使用.get()从CustomTkinter的CTkEntry获取条码查询MySQL

解决CustomTkinter输入框获取值查询MySQL的问题

你的代码主要有三个核心问题,导致UPC_entry.get()无法正确获取输入值完成查询:


问题分析

  1. 查询时机错误:你现在的查询代码在GUI初始化阶段就直接执行了,这时候用户还没在输入框中输入条码,UPC_entry.get()拿到的是空值或占位符文本,自然会报错。
  2. 按钮绑定错误:你把SQL语句字符串search传给了按钮的command参数,按钮点击需要触发的是一个函数,而非字符串。
  3. SQL参数化写法不规范:手动给%s添加单引号是多余的,MySQL的参数化查询驱动会自动处理字符串转义和引号,手动加引号反而可能导致格式错误。

修正后的完整代码

import customtkinter
import mysql.connector

# 先完成数据库连接初始化(根据你的实际配置修改)
mydb = mysql.connector.connect(
    host="你的数据库主机地址",
    user="数据库用户名",
    password="数据库密码",
    database="目标数据库名"
)
mycursor = mydb.cursor()

root = customtkinter.CTk()
root.title("条码查询工具")

# 创建输入框并添加到窗口布局
UPC_entry = customtkinter.CTkEntry(root, placeholder_text="Barcode")
UPC_entry.pack(pady=10, padx=20)

# 定义点击按钮后执行的查询函数
def search_barcode():
    # 获取输入值并去除首尾空格(扫码可能带换行/空格)
    barcode = UPC_entry.get().strip()
    if not barcode:
        print("请输入条码内容")
        return
    
    # 正确的参数化SQL写法,无需给%s加单引号
    query = "SELECT Description FROM doitbest WHERE PrimaryUPC = %s"
    try:
        # 参数用元组传递(单元素元组必须加逗号)
        mycursor.execute(query, (barcode,))
        myresult = mycursor.fetchall()
        
        if myresult:
            # 直接取出描述文本,避免打印元组格式
            for item in myresult:
                print(f"查询结果:{item[0]}")
        else:
            print("未找到该条码对应的信息")
    except Exception as e:
        print(f"查询出错:{str(e)}")

# 创建查询按钮,绑定查询函数
select_button = customtkinter.CTkButton(root, text="Search", command=search_barcode)
select_button.pack(pady=5)

root.mainloop()

关键修正说明

  • 将查询逻辑封装到search_barcode函数中,按钮点击时才触发查询,此时UPC_entry.get()能正确获取用户输入的条码。
  • 用strip()处理输入值,避免扫码时带入的空格/换行导致查询失败。
  • 采用标准的参数化查询写法,既避免SQL注入风险,也能保证参数格式正确。
  • 添加空值判断和异常捕获,方便快速排查输入错误或数据库连接问题。
  • 补充了pack()布局方法,确保输入框和按钮能显示在窗口上(原代码可能遗漏了这一步)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:20:15