我有一个用python 3.5编写的程序,它扫描目录并将信息存储在SQLITE3数据库中。此信息可以在客户端的ttk.treeview中显示。
2个主要功能是1)"扫描"它将信息添加到数据库和2)下面的viewFiles(它只是从数据库中获取数据并在树视图中显示它)。
在扫描功能期间,会打开第二个tkinter窗口并显示有关已扫描的信息。如果我尝试在没有重启的情况下使用viewFiles功能,则显示的数据是不可见的,但我知道数据存在,因为我可以将其复制粘贴到文本文档中。如果我重新启动客户端,则在按下链接到viewFiles函数的按钮后,文本会正确显示。
我认为由于在扫描过程中第二个窗口打开,它必须与焦点偏移有关,但我不确定,也无法找到任何类似的案例可供学习。
def viewFiles(self):
global dataTreeView
results = []
foldersContentsToView = yieldFoldersToView()
for dpath in foldersContentsToView:
sqlstring= "SELECT * FROM DBDATA WHERE directorypath=:dpath"
values = {"dpath": dpath}
[results.append(i) for i in databaseFunctions.getDBobject().returnSelectQueryResults(sqlstring, values)]
for e in results:
dataTreeView.insert('', 'end', values=list(e))
有没有人有任何想法?
答案 0 :(得分:0)
问题在于,通过查询数据库中的字段,树视图 创建 时正在设置列。但是在第一次扫描之前,数据库中没有记录,因此在重新启动之前没有正确配置列,之后数据存在并且可以在树视图创建时查询。
要解决此问题,我将列配置数据移动到viewFiles函数,如下所示:
def viewFiles(self):
global dataTreeView
audioDataTree['columns'] = returnListTableFields()
#Configure Columns
for column in listofdbtablefields():
dataTree.column(column,width=len(column)*10)
dataTree.heading(column, text=column)
dataTree.column(column, anchor='center')
#Hide First Column (TreeLabel)
dataTree.column('#0',width=0)
results = []
foldersContentsToView = yieldFoldersToView()
for dpath in foldersContentsToView:
sqlstring= "SELECT * FROM DBDATA WHERE directorypath=:dpath"
values = {"dpath": dpath}
[results.append(i) for i in databaseFunctions.getDBobject().returnSelectQueryResults(sqlstring, values)]
for e in results:
dataTreeView.insert('', 'end', values=list(e))