簡體   English   中英

無法正確顯示 Tkinter Treeview 中的圖像

[英]Unable to display images in Tkinter Treeview properly

我希望我的方法從 sqlite 數據庫中提取圖像,並將它們顯示為 Treeview 中特定行的圖像。 不幸的是,它只顯示插入的最后一行中的圖像。 我在循環之外定義了一個單一的圖像,它根據我的需要在每一行顯示一個圖像。 這讓我相信,當我在循環中動態定義圖像時,圖像會被垃圾收集。 為了讓我從數據庫中提取圖像並將它們放在 Treeview 中,我不能在循環之外有單個圖像定義,但我不確定如何防止垃圾收集。

注意: db.getdata()是來自另一個文件的 function,該文件從數據庫返回.fetchall()。

 def update_records(self):

        records = self.dbTree.get_children()

        for element in records:
            self.dbTree.delete(element)

        db_rows = db.get_data()

        #img = PhotoImage(file = 'earth.gif').subsample(30, 30)

        for row in db_rows:
            img = tk.PhotoImage(data=row[5]).subsample(20, 20)
            self.dbTree.insert('', 0, text = row[0], values = (row[1], row[2], row[3], row[4]), image 
                              = img)           
            self.dbTree.image = img

window 的圖像

由於您使用相同的屬性self.dbTree.image來保存圖像的引用,因此只保留最后一張圖像,其他圖像被垃圾收集。

使用字典存儲圖像:

self.dbTree.images = {}
for row in db_rows:
    img = tk.PhotoImage(data=row[5]).subsample(20, 20)
    self.dbTree.insert('', 0, text=row[0], values=(row[1], row[2], row[3], row[4]), image=img)           
    self.dbTree.images[row[0]] = img

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM