[英]Tkinter - hide root window
我是堆棧交換的新手,對python經驗不足。 我正在使用python3,並已使用importlib.machinery中的SourceFileLoader從我的主腳本運行另一個腳本(使用tkinter)。 最初導致此問題覆蓋的錯誤: tkinter.TclError:圖像“ pyimage3”不存在
該解決方案為我解決了該錯誤,現在子腳本按預期運行,除了使用Toplevel()函數現在還使應用程序創建了一個空的根窗口-Tk(),我想將其隱藏。 我看了一些無效的問題解決方案: 如何擺脫Python Tkinter根窗口?
打開頂級窗口時隱藏根窗口,並在銷毀頂級時使其重新出現
這是我的代碼示例:
from tkinter import *
from PIL import ImageTk
from importlib.machinery import SourceFileLoader
root = Toplevel()
background = Tk()
...
def Puzzle5():
root.overrideredirect(1)
frame = Frame(root, width=320, height=160, borderwidth=2, relief=RAISED)
frame.pack_propagate(False)
frame.pack(side=TOP)
frame1 = Frame(root, width=500, height=150, borderwidth=2, relief=RAISED)
frame1.pack_propagate(False)
frame1.pack(side=BOTTOM)
image = ImageTk.PhotoImage(file="/home/pi/Media/arrowup.png")
image1 = ImageTk.PhotoImage(file="/home/pi/Media/arrowdown.png")
...
background.withdraw()('0x0+0+0')
root.geometry('644x450+150+50')
root.mainloop()
def close():
root.destroy()
background.destroy()
Puzzle5()
小部件存在於層次結構中。 該層次結構的頂部是根窗口。 對於任何存在的tkinter小部件,必須首先有一個根窗口。
您可以通過創建Tk
的實例來創建根窗口。 如果不這樣做,那么第一次創建窗口時,將為您創建一個根窗口。
現在,考慮以下代碼:
root = Toplevel()
background = Tk()
Toplevel
不是根窗口。 要使其存在,首先必須有一個根窗口。 由於您沒有創建一個,因此tkinter會為您創建一個。 因此,您將獲得一個根窗口,然后獲得Toplevel
實例。
然后 ,使用第二行創建另一個根窗口 ,從而產生三個窗口。 即使使用background.withdraw()
隱藏background
,您仍然可以看到原始的根窗口。
簡單的解決方案是反轉這兩行代碼。 首先創建根窗口,然后創建Toplevel
。 這樣,您只有一個根窗口,並且可以根據需要將其隱藏。 但是,作為“ 如何擺脫Python Tkinter根窗口”的答案? 解釋說,一個更好的解決方案是根本不使用Toplevel
,而是將小部件放在root
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.