2017-04-26 135 views
0

如何隱藏畫布,以便只在需要時才顯示畫布?隱藏/顯示畫布

self.canvas.config(state='hidden') 

只是給出了錯誤說你只能使用「禁用」或「正常」

+0

答案取決於你如何顯示小部件。你使用'pack','place','grid',還是將它嵌入到另一個小部件(另一個畫布或文本小部件)中? –

+0

包。到目前爲止,我在任何例子中唯一見過的地方就是在畫布上添加標籤。 – confused

+0

其實讓我更進一步。我在其他例子中看到它的方式,在我使用pack_propagate的地圖畫布上,但我只是在彈出的畫布上下到了常規包。 – confused

回答

0

在你說你正在使用pack的意見。在這種情況下,您可以使用pack_forget隱藏它。

import tkinter as tk 

def show(): 
    canvas.pack() 

def hide(): 
    canvas.pack_forget() 

root = tk.Tk() 
root.geometry("400x400") 

show_button = tk.Button(root, text="show", command=show) 
hide_button = tk.Button(root, text="hide", command=hide) 

canvas = tk.Canvas(root, background="pink") 
show_button.pack(side="top") 
hide_button.pack(side="top") 
canvas.pack(side="top") 

root.mainloop() 

但是,在這種情況下使用grid通常會更好。 pack_forget()不記得小部件的位置,所以下次您撥打pack時,小部件可能會在不同的地方出現。要看到一個例子,移動canvas.pack(side="top")了兩行,之前show_button.pack(side="top")

grid,在另一方面,有一個grid_remove方法,這將記住所有的設置,這樣就grid()後續調用不帶任何選項將會把小部件回到完全相同的位置。

+0

因此,如果使用包裝,將彈出的代碼放在彈出式調用中與def__init__ – confused

+0

相比,它更好用,我不知道「彈出呼叫」是什麼意思。 –

+0

對不起,術語不好。我的意思是當代碼應該出現並顯示彈出窗口時,我去的功能。我應該在彈出式畫布「initilization(sp?)」的位置放置def_binit嗎?我在考慮完整的代碼,彈出窗口的完整位置是每次進入函數時運行的。 – confused