Python Tkinter переключение между двумя кнопками

Я пытаюсь переключаться между двумя кнопками с помощью tkinter.

У меня есть две кнопки, которые запускают функции. С помощью changeOne нужно только показать ModusAButton и удалить ModusBButton. И наоборот для changeTwo.

Я получил это сообщение об ошибке: _tkinter.TclError: bad window path name ".!button2"

Как правильно это сделать?

ModusAButton = Button(root, text = "ModusA")
ModusBButton = Button(root, text = "ModusB")

def changeOne():
    ModusAButton.grid(row=1,column=0,sticky=W, padx=10,pady=10)
    ModusBButton.destroy()

def changeTwo():
    ModusBButton.grid(row=1,column=1,sticky=W, padx=10,pady=10)
    ModusAButton.destroy()

ChangeOneButton = Button(root, text = "ChangeOne",command=changeOne)
ChangeOneButton.grid(row=0,column=0,sticky=W, padx=10,pady=10)

ChangeTwoButton = Button(root, text = "ChangeTwo",command=changeTwo)
ChangeTwoButton.grid(row=0,column=1,sticky=W, padx=10,pady=10)

С какими проблемами вы столкнулись?

Artemis 14.04.2018 23:21

Я получил это сообщение об ошибке: _tkinter.TclError: неверное имя пути к окну ".! Button2"

K-Doe 14.04.2018 23:22

Вы ставили from tkinter import * в начале?

Artemis 14.04.2018 23:24

Добавьте сообщение об ошибке в вопрос

Artemis 14.04.2018 23:25

Да. Также нормально работает первый щелчок по одной из кнопок изменения. Но следующий щелчок по одной из кнопок изменения вызывает сообщение об ошибке.

K-Doe 14.04.2018 23:25

Как только вы уничтожите виджет, вы больше не сможете вызывать для него методы.

Bryan Oakley 14.04.2018 23:25

Понятно, но я не могу найти правильный способ справиться с этим.

K-Doe 14.04.2018 23:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
218
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

.destroy() вообще избавляется от кнопки. Чтобы удалить его только временно, используйте grid_forget():

def changeOne():
    ModusAButton.grid(row=1,column=0,sticky=W, padx=10,pady=10)
    ModusBButton.grid_forget()

def changeTwo():
    ModusBButton.grid(row=1,column=1,sticky=W, padx=10,pady=10)
    ModusAButton.grid_forget()

Идеально! Это именно то, что я искал! Большое спасибо!

K-Doe 14.04.2018 23:29

@ K-Doe, если ответ решит вашу проблему, вы можете нажать на нем зеленую галочку. Это означает, что будущим людям с вашей проблемой будет легче увидеть ответ, а также наградить вас 2 репом, а отвечающим 15 реп.

Artemis 14.04.2018 23:30

Я буду, но мне нужно подождать еще 2 минуты! Спасибо и хорошего дня.

K-Doe 14.04.2018 23:31

Другие вопросы по теме