2016-12-17 1 views
-1

python 3.5で記述されたプログラムがあり、ディレクトリをスキャンしてSQLite3 dbに格納します。この情報は、クライアントのttk.treeviewに表示することができます。Tkinterツリービューのテキストは、クライアントが再起動するまで表示されません。

2つの主な機能は、1) "db"と2)viewFilesに情報を追加する "スキャン"(dbのデータを取得してツリービューに表示する)です。

スキャン機能の実行中、2番目のtkinterウィンドウが開き、スキャンされたものに関する情報が表示されます。再起動せずにviewFiles関数を使用しようとすると、表示されるデータは見えなくなりますが、テキストドキュメントに貼り付けることができるので、データがそこにあることがわかります。クライアントを再起動すると、viewFiles関数にリンクされたボタンを押した後にテキストが正しく表示されます。

私は、この2回目のウィンドウがスキャンプロセス中に開いているので、フォーカスシフトに関係するものでなければならないと思いますが、わからないし、似たようなケースを見つけることができません。

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

答えは、ツリービューが表示されていない理由に依存します。それは適切に置かれたかグリッド化されていますか?ですから、おそらくfocus_get()またはlift()が必要です。 http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html –

+0

正しく梱包されています。 viewFilesが実行されると、スクロールバーがアクティブになり、値のセットを上下にスクロールして行を選択することもできます。唯一のことは、実際にテキストを見ることができないことです。クライアントを再起動しない限り。私はfocus_get()、lift()、focus_force()を使ってみましたが、変更はありません... – user3535074

答えて

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)) 
関連する問題