流心汤圆 2022-02-25 17:21 采纳率: 100%
浏览 163
已结题

python gui 表格(tree)清空问题

帮忙解释一下为什么表格清空不了啊?🙏

img

代码如下:

import pymssql
from tkinter import ttk, Button
import tkinter as tk
import tkinter.font as tkFont
from tkinter import *        # 图形界面库
import tkinter.messagebox as messagebox # 弹窗
from PIL import ImageTk, Image

# 开始页面
class selece_user:
    def __init__(self, parent_window):
        # parent_window.update()
        parent_window.destroy()  # 销毁子界面

        self.window = tk.Tk()  # 初始框的声明
        self.window.title('管理员查询用户信息')
        self.window.geometry('800x650+270+30')  # 这里的乘是小x

        label = tk.Label(self.window, text='查询用户信息', bg='orchid', font=('黑体', 27), width=60, height=2).pack()
        Label(self.window, text='查询用户的账号:', font=tkFont.Font(size=18)).place(x=100,y=130)
        self.admin_tid = tk.Entry(self.window, width=30, font=tkFont.Font(size=18), bg='Ivory')  # 账号输入框
        self.admin_tid.place(x=315,y=130)

        Button(self.window, text="查询", width=10, font=tkFont.Font(size=15), command=self.chaxun).place(x=215,y=200)
        Button(self.window, text="返回", width=10, font=tkFont.Font(size=15), command=self.window.destroy).place(x=475,y=200)

        # 表格
        self.columns = ("游客账号", "姓名", "联系电话", "年龄", "性别", "地址", "身份证号")  # 定义列
        self.tree = ttk.Treeview(self.window, height=350, show='headings', columns=self.columns)  # 隐藏首列
        self.tree.place(x=0, y=280)

        # 设置列,列还不显示
        self.tree.column("游客账号", width=120)
        self.tree.column("姓名", width=86)
        self.tree.column("联系电话", width=125)
        self.tree.column("年龄", width=86)
        self.tree.column("性别", width=86)
        self.tree.column("地址", width=105)
        self.tree.column("身份证号", width=189)

        # 设置表头
        self.tree.heading("游客账号", text="游客账号")
        self.tree.heading("姓名", text="姓名")
        self.tree.heading("联系电话", text="联系电话")
        self.tree.heading("年龄", text="年龄")
        self.tree.heading("性别", text="性别")
        self.tree.heading("地址", text="地址")
        self.tree.heading("身份证号", text="身份证号")

        self.sql_tid = []  # 账号
        self.sql_tname = []  # 姓名
        self.sql_tphone = []  # 电话
        self.sql_tage = []  # 年龄
        self.sql_tsex = []  # 性别
        self.sql_taddress = []  # 地址
        self.sql_tcard = []  # 身份证

        # 打开数据库连接
        con = pymssql.connect(server='192.168.0.103', port='1433', user='sa', password='123456', database='票务管理系统')
        cursor = con.cursor()  # 使用cursor()方法获取操作游标
        try:
            # 执行SQL语句
            cursor.execute("SELECT * FROM 用户信息表")
            # 获取所有记录列表
            results = cursor.fetchall()
            for row in results:
                self.sql_tid.append(row[0])
                self.sql_tname.append(row[2])
                self.sql_tphone.append(row[3])
                self.sql_tage.append(row[4])
                self.sql_tsex.append(row[5])
                self.sql_taddress.append(row[6])
                self.sql_tcard.append(row[7])
        except:
            print("Error: unable to fetch data")
            messagebox.showinfo('警告!', '数据库连接失败!')
        con.close()  # 关闭数据库连接

        # 写入数据
        for i in range(min(len(self.sql_tid),len(self.sql_tname),len(self.sql_tphone),len(self.sql_tage),len(self.sql_tsex),len(self.sql_taddress),len(self.sql_tcard))):
            self.tree.insert('',i,values=(self.sql_tid[i],self.sql_tname[i],self.sql_tphone[i],self.sql_tage[i],self.sql_tsex[i],self.sql_taddress[i],self.sql_tcard[i]))

        self.window.mainloop()  # 主消息循环

    # 清空表格
    def delButton(self):
        x = self.tree.get_children()
        for item in x:
            self.tree.delete(item)

    # 查询按钮
    def chaxun(self):
        self.delButton()  # 清空

        # 从界面获取的数据
        admin_tid = str(self.admin_tid.get())
        sql_tid = str(self.sql_tid)

        if str(self.admin_tid.get()) not in str(self.sql_tid):
            messagebox.showinfo('警告!', '该用户不存在!')

        # 打开数据库连接
        con = pymssql.connect(server='192.168.0.103', port='1433', user='sa', password='123456', database='票务管理系统')
        cursor = con.cursor()  # 使用cursor()方法获取操作游标
        try:
            cursor.execute("SELECT * FROM 用户信息表 WHERE ID = '%s'" % (admin_tid))
            results = cursor.fetchall()
            for row in results:
                self.sql_tid.append(row[0])
                self.sql_tname.append(row[2])
                self.sql_tphone.append(row[3])
                self.sql_tage.append(row[4])
                self.sql_tsex.append(row[5])
                self.sql_taddress.append(row[6])
                self.sql_tcard.append(row[7])
        except:
            print("Error: unable to fetch data")
            messagebox.showinfo('警告!', '查询失败!')
        con.close()  # 关闭数据库连接

        # 写入数据
        for i in range(min(len(self.sql_tid),len(self.sql_tname),len(self.sql_tphone),len(self.sql_tage),len(self.sql_tsex),len(self.sql_taddress),len(self.sql_tcard))):
            self.tree.insert('',i,values=(self.sql_tid[i],self.sql_tname[i],self.sql_tphone[i],self.sql_tage[i],self.sql_tsex[i],self.sql_taddress[i],self.sql_tcard[i]))


win = tk.Tk()
selece_user(win)

  • 写回答

2条回答 默认 最新

  • Smart-Space 2022-02-26 10:56
    关注

    你要清空self.sql_tid,否则每次都会被插入表格。
    也就是说,在chaxun函数开头,使用如self.sql_tid=[]的代码,记住,要把所有元素都清空。比如:

        def chaxun(self):
            self.delButton()  # 清空
            self.sql_tid=[]
            self.sql_tname=[]
            self.sql_tphone=[]
            self.sql_tage=[]
            self.sql_tsex=[]
            self.sql_taddress=[]
            self.sql_tcard=[]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载