我正在為自己開發一個應用程式(在這種情況下)顯示專案串列。但是,這個專案串列需要大約 10 秒才能拉出,所以與此同時,我想向用戶展示一個加載螢屏。目前,我的程式使用該place方法放置,然后洗掉一個gif(使用自定義影像類進行影片處理),如下所示:

并滿載:

但是,我有另一個框架(在筆記本中-您可以看到選項卡),我最終將對其進行編碼以具有內容和獨立的加載影像(它將在與第一個選項卡不同的時間開始/停止)。但是,當我在加載第一個選項卡時移動到第二個選項卡時,位置管理器不希望地將影像保留在那里:

如何使此影像僅顯示在第一個選項卡上而不顯示在第二個選項卡上?由于這是我自己的專案,我并不專注于完美,如果有必要,我很可能只是在樹視圖中添加一個文本元素,說明它正在加載(另一個框架也將有一個樹視圖)。我也寧愿不學習一門新語言(我知道一些 java 和 JS,但 python 是我的強項),因為正如我之前所說,這對我來說只是一種愛好。
這是一個最小的可重現示例。該代碼需要同一目錄中的一個檔案 (img.png) 才能運行。您會注意到,即使 tab2 已經有資料,加載影像也會出現在 tab1 和 tab2 中。
import tkinter as tk
from tkinter import ttk
from time import sleep
from PIL import Image, ImageTk
root = tk.Tk()
root.geometry('400x300')
root.title('Notebook Demo')
notebook = ttk.Notebook(root)
notebook.pack(pady=10, expand=True)
frame1 = ttk.Frame(notebook, width=400, height=280)
frame2 = ttk.Frame(notebook, width=400, height=280)
frame1.pack(fill='both', expand=True)
frame2.pack(fill='both', expand=True)
notebook.add(frame1, text='1')
notebook.add(frame2, text='2')
label1 = ttk.Label(frame1, text = "stuff of 1 - loading")
label2 = tk.Label(frame2, text="label 2 data: already here", width=60, height=15)
label1.pack()
label2.pack()
def load_data():
label1.config(text='label 1 data: 10110')
label2.place_forget()
image1 = Image.open("img.png").resize((50,100))
test = ImageTk.PhotoImage(image1)
label2 = ttk.Label(image=test)
label2.image = test
label2.place(x=30,y=30)
root.after(5000,load_data)
root.mainloop()
uj5u.com熱心網友回復:
如評論中所述,問題在于..:
ttk.Label(image=test)如果沒有位置引數,即沒有=,的引數作為主引數給出,則root默認設定視窗。
給它一個主人(即ttk.Label(frame1,image=test))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/407814.html
標籤:
上一篇:獲取樹視圖選擇發生的順序?
