使用python(Tkinter)进行按钮切换

时间:2018-07-01 13:55:39

标签: python-2.7 tkinter

我想做的基本上是切换按钮。

按下按钮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 :(得分:0)

函数Launch1中的变量B仅在该函数中本地定义 B2也是如此。 因此,D1功能不能访问B,而D2功能不能访问B2。

您需要找到一种使函数D看到变量B的方法 一种解决方案是在函数外部创建B,然后在两个函数launch1和D中使用全局B-然后对B2执行相同的操作 这不是推荐的解决方案,通常您会定义一个可以容纳B,B2和这四个函数的类,那么就不需要全局变量

答案 1 :(得分:0)

只需以以下方式将行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()

该程序现在非常适合我。