Есть ли способ скрыть многочисленные виджеты с помощью tkinter, если использовался метод place ()? - PullRequest
0 голосов
/ 18 июня 2020

У меня возникли трудности с одной конкретной c частью моего кода меню. Я использовал метод place () для более подробного c размещения кнопок и виджетов на главном экране.

Есть ли способ скрыть все кнопки главного меню и виджеты ярлыков? Кажется, что метод grid () имеет действительно интуитивно понятный способ скрыть большое количество виджетов с помощью grid_forget () или pack_forget (). Есть ли у place_forget () какие-либо вариативности, когда дело доходит до сокрытия чего-то большего, чем просто указанная c метка?

Пример кода:

### 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)

1 Ответ

1 голос
/ 18 июня 2020

Метод place_forget() работает почти так же, как методы forget_pack() и forget_grid() - все они работают с виджетом и по существу «скрывают» этот виджет. Выбор того, какой из них использовать, зависит от того, какой менеджер геометрии использовался для отображения виджета.

поэтому, чтобы скрыть некоторые кнопки меню (или любой набор кнопок), вы можете сделать что-то вроде:

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

for button in menu_buttons:
    button.place_forget()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...