从DB以表格形式输出数据时,会出现一个空列,占用大量空间。
我想删除此栏,但不知道如何删除。这是我的代码:{
import customtkinter as ctk
import sqlite3
import tkinter as tk
import pywinstyles
from tkinter import ttk
tables = []
edit_entry = None
save_button = None
cancel_button = None
# Функции ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
# Главная функция
def init(filepath):
from functions import log
from functions import l_settings
conn = sqlite3.connect(filepath)
cursor = conn.cursor()
# Главная функция
def close_aplication():
exit()
def button_show_all_data():
global tables
if tables:
return
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
table_frame = ttk.Frame(root)
table_frame.pack(pady=20, fill="both", expand=True)
scrollbar_y = tk.Scrollbar(table_frame, orient="vertical")
scrollbar_y.pack(side="right", fill="y")
scrollbar_x = tk.Scrollbar(table_frame, orient="horizontal")
scrollbar_x.pack(side="bottom", fill="x")
tree = ttk.Treeview(table_frame, xscrollcommand=scrollbar_x.set, yscrollcommand=scrollbar_y.set)
tree['columns'] = columns
for column in columns:
tree.column(column, anchor="w")
tree.heading(column, text=column)
for row in rows:
tree.insert('', 'end', values=list(row))
scrollbar_x.config(command=tree.xview)
scrollbar_y.config(command=tree.yview)
tree.pack(fill="both", expand=True)
tables.append(table_frame)
tree.bind("<Button-1>", lambda event: edit_cell(event, tree, columns))
tree['yscrollcommand'] = scrollbar_y.set
tree['xscrollcommand'] = scrollbar_x.set
def button_hide_table():
global tables
for table in tables:
if table.winfo_exists():
table.destroy()
tables = []
def edit_cell(event, tree, columns):
global edit_entry, save_button, cancel_button
if edit_entry is not None:
edit_entry.destroy()
save_button.destroy()
cancel_button.destroy()
item = tree.identify_row(event.y)
column = tree.identify_column(event.x)
cell_value = tree.item(item, 'values')[int(column[1:]) - 1]
edit_entry = tk.Entry(tree, width=20)
edit_entry.insert(0, cell_value)
edit_entry.place(x=event.x, y=event.y)
def save_changes():
global edit_entry, save_button, cancel_button
new_value = edit_entry.get()
tree.item(item, values=list(tree.item(item, 'values')[:int(column[1:]) - 1]) + [new_value] + list(tree.item(item, 'values')[int(column[1:]) - 1 + 1:]))
cursor.execute(f"UPDATE users SET {columns[int(column[1:]) - 1]} = '{new_value}' WHERE id = {tree.item(item, 'values')[0]}")
conn.commit()
edit_entry.destroy()
save_button.destroy()
cancel_button.destroy()
edit_entry = None
save_button = None
cancel_button = None
def cancel_changes():
global edit_entry, save_button, cancel_button
edit_entry.destroy()
save_button.destroy()
cancel_button.destroy()
edit_entry = None
save_button = None
cancel_button = None
save_button = tk.Button(tree, text="Сохранить", command=save_changes)
save_button.place(x=event.x, y=event.y + 20)
cancel_button = tk.Button(tree, text="Отмена", command=cancel_changes)
cancel_button.place(x=event.x + 50, y=event.y + 20)
# Функции --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
root = ctk.CTk()
root.title("Sqlite3 reader")
root.minsize(700, 400)
if l_settings.change('read', '', 'fullscreen'):
root.attributes("-fullscreen", True)
if l_settings.change('read', '', 'style') != 'normal':
pywinstyles.apply_style(root, l_settings.change('read', '', 'readerstyle'))
ctk.set_appearance_mode(l_settings.change('read', '', 'theme'))
frame = ctk.CTkFrame(root, width=200, height=root.winfo_screenheight())
frame.pack(side="left", fill="y", pady=0, padx=0)
button_show_all = ctk.CTkButton(frame, text="Показать все данные")
button_exit = ctk.CTkButton(frame, text="Выйти")
button_hide = ctk.CTkButton(frame, text="Скрыть таблицу")
button_exit.configure(command=close_aplication)
button_show_all.configure(command=button_show_all_data)
button_hide.configure(command=button_hide_table)
button_show_all.pack(side="top", pady=10, padx=10)
button_hide.pack(side="top", pady=10, padx=10)
button_exit.pack(side="bottom", fill="x")
root.mainloop()
}
我尝试使用 columns = [desc[0] for desc incursor.description if desc[0] not in ['rowid']] 删除它,但没有帮助
它是树列,可以通过在创建
show="headings"
小部件时设置Treeview
来删除:
...
tree = ttk.Treeview(table_frame, xscrollcommand=scrollbar_x.set,
yscrollcommand=scrollbar_y.set, show="headings")
...