簡體   English   中英

Tkinter-隱藏根窗口

[英]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.

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