[英]Problem Destroying Button Tkinter, NameError
我对使用 Python 进行编程比较陌生,并且正在使用 Tkinter 构建一个相当简单的石头剪刀布游戏。 基本上,我有一个按钮,调用此 function,在此 function 中,我想销毁我创建的按钮,但出现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 解释器,并且现在还不想使用课程(我知道我将不得不很快开始学习它)。
python function 中的global
变量只允许 function 读取和修改全局 Z31A1FD140BE4BEF2AECA81 中的变量。 它不会创建变量。 假设您的play()
function 是您第一次定义Rock
、 Paper
和Scissors
,您必须首先在任何 function 之外创建 3 个变量,如下所示:
Rock = None
Paper = None
Scissors = None
然后在您的choose()
function 中,添加全局变量,如下所示:
def choose(choice):
global Rock
global Paper
global Scissors
if choice == "rock":
Paper.destroy()
Scissors.destroy()
您必须在要使用该全局变量的每个 scope 中包含global
关键字。这有效:
def choose(choice):
global Paper
global Scissors
if choice == "rock":
Paper.destroy()
Scissors.destroy()
但一般来说,对于这样的事情,我会将对象作为参数传递给 function,即:
def choose(choice, paper, scissors):
if choice == "rock":
paper.destroy()
scissors.destroy()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.