Python 3.x Tkinter treeview文本在客户端重新启动之前不可见

Python 3.x Tkinter treeview文本在客户端重新启动之前不可见,python-3.x,tkinter,treeview,Python 3.x,Tkinter,Treeview,我有一个用python 3.5编写的程序,它扫描目录并将信息存储在SQLITE3数据库中。此信息可以显示在客户端的ttk.treeview中 这两个主要功能是1)“扫描”,将信息添加到数据库中;2)查看下面的文件(它只是从数据库中获取数据并在树视图中显示) 在扫描功能期间,第二个tkinter窗口打开,显示扫描内容的信息。如果我尝试在不重新启动的情况下使用viewFiles功能,则显示的数据不可见,但我知道数据在那里,因为我可以将其复制粘贴到文本文档中)。如果重新启动客户端,则在按下链接到vie

我有一个用python 3.5编写的程序,它扫描目录并将信息存储在SQLITE3数据库中。此信息可以显示在客户端的ttk.treeview中

这两个主要功能是1)“扫描”,将信息添加到数据库中;2)查看下面的文件(它只是从数据库中获取数据并在树视图中显示)

在扫描功能期间,第二个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))

有人有什么想法吗?

问题是,在通过查询数据库中的字段创建treeview的那一刻,正在设置列。但是,在第一次扫描之前,数据库中没有记录,因此在重新启动之前,列没有正确配置,在重新启动之后,数据就存在了,并且可以在创建treeview时查询数据

为了解决这个问题,我将列configure data移动到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))

答案取决于树视图不可见的原因。是否已正确放置或网格化?如果是这样,也许您需要focus_get()或lift()。包装正确。执行viewFiles时,滚动条将激活,您可以上下滚动值集,甚至选择行。唯一的问题是你实际上看不到文本。除非重新启动客户端。我试着在树视图上使用focus_get()、lift()甚至focus_force(),但没有改变。。。