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

Tkinter程序SQL查询结果无法显示在Label组件求助

解决方案

核心问题修正与优化

原代码存在三个关键问题:控制台输出未关联界面、Label组件绑定错误、数据库连接参数格式错误,同时针对表头翻译和数据显示体验做了优化。

修改后的完整代码

from __future__ import print_function
import sqlalchemy as sa
import pandas as pd
import tkinter as tk
from tkinter import scrolledtext
from PIL import ImageTk, Image

# 数据库配置
server = 'ABQSQ03t'
username = 'TECO//AAPWP'
password = '*****@#'
timeout = '60'
database = 'NMGC_PIM_DEV'
driver = 'ODBC+Driver+17+for+SQL+Server'

# 修正数据库连接URL(参数用&分隔,原代码多?会导致连接失败)
engine = sa.create_engine(
    f'mssql+pyodbc://{server}/{database}?username={username}&password={password}&timeout={timeout}&driver={driver}'
)
cn = engine.connect()

root = tk.Tk()
root.title("合规性SQL后台报表")

HEIGHT = 800
WIDTH = 1000

# 背景图片设置
canv = tk.Canvas(root, width=80, height=80, bg='white')
canv.place(relwidth=1, relheight=1)
img = ImageTk.PhotoImage(Image.open("NMGC_Emera_color240x75.png"))
canv.create_image(20, 20, anchor='nw', image=img)

background_label = tk.Label(root, image=img)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

# 英文表头转中文映射
column_mapping = {
    'APPGROUPID': '应用组ID',
    'APPTITLE': '应用标题',
    'DESCRIPTION': '描述',
    'ORGAREANAME': '组织区域名称',
    'CONGROUPNAME': '配置组名称',
    'DISPLAYLEVELCOUNT': '显示层级数',
    'CreatedDate': '创建日期',
    'CreatedBy': '创建人',
    'ModifiedDate': '修改日期',
    'ModifiedBy': '修改人'
}

# 查询与界面更新函数
def test_function(entry):
    try:
        # 执行SQL查询并转为DataFrame
        df = pd.read_sql(f'Select * from [dbo].[{entry}]', con=cn)
        # 替换表头为中文
        df.rename(columns=column_mapping, inplace=True)
        # 将数据转为格式化字符串(隐藏索引)
        result_text = df.to_string(index=False)
        # 清空结果框并插入新内容
        result_box.delete(1.0, tk.END)
        result_box.insert(tk.INSERT, result_text)
    except Exception as e:
        # 捕获错误并显示在界面
        result_box.delete(1.0, tk.END)
        result_box.insert(tk.INSERT, f"查询错误: {str(e)}")

# 界面布局
canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
canvas.pack()

# 输入框与按钮框架
frame = tk.Frame(root, bg='#7B94AD', bd=5)
frame.place(relx=0.5, rely=0.1, relwidth=0.75, relheight=0.1, anchor='n')

entry = tk.Entry(frame, bg='white')
entry.place(relwidth=0.65, relheight=1)

button = tk.Button(frame, text='生成报表', font=40, command=lambda: test_function(entry.get()))
button.place(relx=0.7, relheight=1, relwidth=0.3)

# 结果显示区域(用带滚动的Text替代Label,适配大量数据)
lower_frame = tk.Frame(root, bg='#7B94AD', bd=10)
lower_frame.place(relx=0.5, rely=0.25, relwidth=0.75, relheight=0.6, anchor='n')

result_box = scrolledtext.ScrolledText(lower_frame, bg='white', font=('Arial', 10))
result_box.place(relwidth=1, relheight=1)

root.mainloop()

关键修改说明

  • 数据库连接修复:将URL中的多个?替换为&,确保连接参数正确解析
  • 表头翻译:通过column_mapping字典实现中英文表头替换
  • 数据显示优化:用scrolledtext.ScrolledText替代Label,支持滚动查看大量数据,避免内容溢出
  • 界面逻辑修正:直接在查询函数中操作Text组件,实现数据从数据库到界面的传递,替代原控制台输出逻辑
  • 错误处理:添加异常捕获,将查询错误直接显示在界面,便于排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:45:41