首页 > 解决方案 > 销毁按钮 Tkinter 的问题,NameError

问题描述

我对使用 Python 编程比较陌生,并且正在使用 Tkinter 构建一个相当简单的石头剪刀布游戏。基本上,我有一个按钮,它调用这个函数,在这个函数中,我想销毁我创建的按钮,但是NameError出现了一个。

下面是相关代码:

def choose(choice):
    if choice == "rock":
        Paper.destroy()
        Scissors.destroy()

def play():
    global Rock
    Rock = Button(root, image = rock_photo, padx = 30, pady = 10, bg = "#fcf003", command = lambda: choose("rock"))
    global Paper
    Paper = Button(root,image = paper_photo, padx = 30, pady = 10, bg = "#c603fc", command=lambda: choose("paper"))
    global Scissors
    Scissors = Button(root,image = scissor_photo, padx = 30, pady = 10, bg = "#39fc03", command=lambda: choose("scissors"))

    Rock.grid(row = 1, column = 0)
    Paper.grid(row = 1, column = 2)
    Scissors.grid(row = 1, column = 1)
play()

此外,错误:

NameError: name 'Paper' is not defined

如果我需要提供更多信息,请告诉我。另外,我正在使用 3.8 解释器,并且现在还不想使用课程(我知道我将不得不很快开始学习它)。

标签: pythonmacostkinter

解决方案


globalpython函数中的变量只是允许函数在全局范围内读取和修改变量。它不会创建变量。假设您的play()函数是您第一次定义RockPaperScissors,您必须首先在任何函数之外创建 3 个变量,如下所示:

Rock = None
Paper = None
Scissors = None

然后在你的choose()函数中,添加全局变量,如下所示:

def choose(choice):
    global Rock
    global Paper
    global Scissors
    if choice == "rock":
        Paper.destroy()
        Scissors.destroy()

请参阅Python 中的全局变量和局部变量


推荐阅读