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

Python Tkinter多窗口共享SQLite数据报'str'无法转整数错误如何解决

问题排查与解决方案

核心错误原因

你代码的核心问题是变量名冲突+传参逻辑错误,触发报错的直接原因:

  • Tkinter内置的END常量本质是字符串'end',你误把它传给了Python原生列表的insert()方法,而列表的insert第一个参数要求是整数索引,所以抛出'str' object cannot be interpreted as an integer错误
  • 更深层的诱因是你重复使用items作为变量名,同时用它指代Tkinter列表框控件、数据库查询结果列表、函数参数,导致逻辑混乱。

具体错误点拆解

  1. 函数参数逻辑错误
    你原本设计fill_item_list函数应该接收两个参数:要填充的Tkinter列表框控件、待插入的数据集,但你现在只写了一个参数items,把查询到的数据集传进去后,函数内的items就变成了数据集列表,而非列表框控件。
  2. 全局变量被覆盖
    你在item_list_view中执行items = app.manager.data_1.view()时,直接覆盖了全局作用域中原本指向Tkinter列表框控件的items变量,后续调用的都是字符串列表而非控件。

修复后的代码示例

1. 修正展示逻辑代码,分离参数避免变量名冲突

# 假设全局的列表框控件名修改为item_listbox,避免和数据集变量重名冲突
def clear_item_list():
    item_listbox.delete(0, END)

def fill_item_list(listbox_widget, data_list):
    for item_ in data_list:
        listbox_widget.insert(END, item_)

def item_list_view():
    clear_item_list()
    # 数据集变量改名,不要和控件名重复
    query_result = app.manager.data_1.view()
    fill_item_list(item_listbox, query_result)

2. 确认数据库查询逻辑

确认app.manager.data_1.view()返回的是符合插入要求的元组/列表格式,如果返回的是单条字符串,需要先做格式化处理再传入列表框。

额外注意事项

你提供的数据库创建代码存在缩进错误,connect函数内部的代码需要统一缩进,且需要提前导入sqlite3模块,否则无法正常运行:

import sqlite3
def connect():
    conn = sqlite3.connect("../database.db")
    cur = conn.cursor()
    cur.execute(
       "CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY , name text , price INTEGER )"
    )
    conn.commit()
    conn.close()

connect()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:21:00