首页 > 解决方案 > 使用 tkinter,如果使用 place() 方法,有没有办法隐藏许多小部件?

问题描述

我对我的菜单代码的一个特定部分有困难。我使用 place() 方法在主屏幕上更具体地放置按钮和小部件。

有没有办法隐藏所有的主菜单按钮和标签小部件?grid() 方法似乎有一种非常直观的方法来使用 grid_forget() 或 pack_forget() 隐藏大量小部件。当涉及隐藏的不仅仅是特定标签时,place_forget() 是否有任何可变性?

代码示例:

### Menu navigation to Training page
def createTrainingPage(event):
    event.widget.place_forget()


#######################
### Widget Creation ###
#######################

### Buttons

TrainingButton = Button(text="Training", foreground="blue", font="bold")
TrainingButton.place(relx=0.07, rely=0.31, anchor=W)
TrainingButton.bind('<Button-1>', createTrainingPage)


    ### I want the createTrainingPage() method to 'erase' 
    ### the menu and create the next page. But it only erases the one
    ### widget the bind() function is attached to. Thoughts?


QuizzesButton = Button(text="Quizzes", foreground="blue", font="bold")
QuizzesButton.place(relx=0.07, rely=0.51, anchor=W)


TrainerButton = Button(text="Management", foreground="blue", font="bold")
TrainerButton.place(relx=0.038, rely=0.71, anchor=W)



### Labels

# Bell Bank img logo
LogoLabel = ttk.Label(image=renderedLogo)
LogoLabel.place(relx=0.025, rely=.1, anchor=W)


TrainingLabel = ttk.Label(prog, text="Training To-Do, Scheduling, etc.", foreground="blue", background="lightgray")
TrainingLabel.place(relx=0.3, rely=0.31, anchor=W)


QuizzesLabel = ttk.Label(prog, text="Quiz Scores, Performance, etc.", foreground="blue", background="lightgray")
QuizzesLabel.place(relx=0.3, rely=0.51, anchor=W)


TrainerLabel = ttk.Label(prog, text="Trainer Admin: Course, Roster and Training Mgmt", foreground="blue", background="lightgray")
TrainerLabel.place(relx=0.3, rely=0.71, anchor=W)

标签: pythonuser-interfacetkinter

解决方案


该方法的工作原理与和方法place_forget()几乎相同——它们都对一个小部件进行操作,并且基本上“隐藏”了该小部件。使用哪个几何管理器的选择取决于用于显示小部件的几何管理器。forget_pack()forget_grid()

因此,要隐藏一些菜单按钮(或任何一组按钮),您可以执行以下操作:

menu_buttons = [...]  # (bunch of ttk or tkinter Buttons)

for button in menu_buttons:
    button.place_forget()

推荐阅读