在客户端重新启动之前,Tkinter树视图文本不可见

时间:2016-12-17 19:40:20

标签: python-3.x tkinter treeview

我有一个用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))

有没有人有任何想法?

1 个答案:

答案 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))