问题描述
我正在Tkinter / Ttk中创建一个简单的sqlite数据库查看器。它由一个ttk笔记本组成,每个选项卡中都有一个表格。对于较小的表,它可以很好地加载,但对于具有1000多个行的表,它会出现毛刺。
它的外观:
大桌子上的外观:
(顶部的白色部分覆盖了其他窗口,有点奇怪)
是否有更好的方式加载表,以免发生这种情况?
代码:
import tkinter as tk
import tkinter.filedialog
from tkinter import ttk
import random
class dbTable(tk.Frame):
def __init__(self,*args,**kwargs):
tk.Frame.__init__(self,**kwargs)
def populateTable(self,data):
for n1,line in enumerate(data):
if n1 == 0: #Header
bg = "lightgray"
else:
bg = "white"
for n2,item in enumerate(line):
f = tk.Frame(self,highlightthickness = 1,highlightbackground = "black",bg = bg)
f.grid(row = n1,column = n2,sticky = "nesw")
l = tk.Label(f,bg = bg,text = item)
l.pack(padx = 3,pady = 3,fill = "both",expand = True)
if len(data) == 1:
f = tk.Label(self,text = "No data")
f.grid(row = 2,column = 0,columnspan = len(data[0]))
class DatabaseViewer(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.title("Database viewer")
self.loadData()
self.openViewer()
def loadData(self):
self.tables = ["example"]
self.tableHeaders = {"example":("header1","header2","header3","header4")}
randData = [(n,random.randint(10,20000000),20000000)) for n in range(1000)]
self.tableData = {"example":randData}
def openViewer(self):
self.viewerFrm = tk.Frame(self)
self.viewerFrm.pack()
self.viewerNotebook = ttk.Notebook(self.viewerFrm)
self.viewerNotebook.pack()
for table in self.tables:
f = tkinter.Frame(self.viewerNotebook)
self.viewerNotebook.add(f,text = table)
t = dbTable(f)
t.pack(fill = "both",expand = True)
t.populateTable([self.tableHeaders[table]] + self.tableData[table])
app = DatabaseViewer()
app.mainloop()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)