如何在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
相关产品推荐
相关产品推荐

