Переключение кнопок с помощью Python (Tkinter) - PullRequest
0 голосов
/ 01 июля 2018

Что я пытаюсь сделать, так это переключать кнопки.

При нажатии кнопки 1 она разрушается, а затем запускается кнопка 2.

У меня ошибка, вот код.

from Tkinter import *
root = Tk()
root.title('TEST')
def D1():
    B.destroy()
    Launch2()

def D2():
    B2.destroy()
    Launch1()

def Launch1():
    B = Button (root, text = 'BUTTON 1', command = D1)
    B.pack()


def Launch2():
    B2 = Button (root, text = 'BUTTON 2', command = D2)
    B2.pack()


Launch1()
mainloop()

Ошибка:

        Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1541, in __call__
    return self.func(*args)
  File "C:\Users\youse\Desktop\Tkinter Testing GUI.py", line 5, in D1
    B.destroy()
NameError: global name 'B' is not defined

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Просто добавьте строки, глобальную B и глобальную B2 в код следующим образом:

def Launch1():
    global B     # Make B a global variable
    B = Button (root, text = 'BUTTON 1', command = D1)
    B.pack()


def Launch2():
    global B2    # Make B2 a global variable
    B2 = Button (root, text = 'BUTTON 2', command = D2)
    B2.pack()

Программа теперь отлично работает для меня.

0 голосов
/ 01 июля 2018

Переменная B в функции Launch1 определяется локально только в этой функции То же самое относится и к B2. Следовательно, функция D1 не имеет доступа к B, а D2 не имеет доступа к B2.

Вам нужно найти способ заставить функцию D видеть переменную B Одно из решений - создать B вне функций, затем использовать глобальный B в двух функциях launch1 и D, а затем сделать то же самое для B2. Это не рекомендуемое решение, обычно у вас есть определенный класс, который может содержать B, B2 и четыре функции, тогда не будет необходимости в глобальных переменных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...