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

如何在Tkinter Combobox中展示SQLite数据库拼接的城市旅行目的地

实现步骤与修正代码

1. 修正SQLite表结构

你原来的表定义里city1、city2字段类型设为了INTEGER,实际存储的是城市名字符串,需要改为TEXT类型,正确建表语句如下:

CREATE TABLE "destinations" (
    "id"    INTEGER,
    "city1" TEXT,
    "city2" TEXT,
    PRIMARY KEY("id" AUTOINCREMENT)
);
-- 插入测试数据
INSERT INTO destinations (city1, city2) VALUES ('London', 'Manchester'), ('Paris', 'Bordeaux');

2. 修正Tkinter实现代码

核心逻辑为:从数据库查询时直接拼接两个字段为完整目的地字符串,再将结果列表传给combobox的values参数即可。正确代码如下:

from tkinter import *
from tkinter import ttk
import sqlite3

app = Tk()
app.title("目的地选择")
app.geometry("300x200")

# 连接数据库查询拼接后的目的地
con = sqlite3.connect('database.db')
cursor = con.cursor()
# 直接用SQL的||运算符拼接两个字段,省去Python层循环处理
cursor.execute("SELECT city1 || '-' || city2 FROM destinations")
# 取出所有查询结果,转为一维列表
dest_list = [item[0] for item in cursor.fetchall()]
con.close()

combo = ttk.Combobox(app, width=21, values=dest_list)
combo.place(x=30, y=20)
combo.set("Select")

# 你可以根据需要补充Combobox选中事件的处理函数,示例如下:
# def on_select(event):
#     print(combo.get())
# combo.bind('<<ComboboxSelected>>', on_select)

app.mainloop()

原代码错误点说明

  • 冗余导入两次tkinter模块,同一模块无需重复导入
  • 调用cursor.execute时缺少括号,不符合Python语法要求
  • 两次查询都取了city1字段,没有取city2
  • 字符串拼接时直接写了字面量"city1" "-" "city2",没有用到实际从数据库取到的变量值
  • 给combobox设置values时错误传入了combobox对象本身,应该传入选项列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:36:00