python - 销毁按钮 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 解释器,并且现在还不想使用课程(我知道我将不得不很快开始学习它)。
解决方案
global
python函数中的变量只是允许函数在全局范围内读取和修改变量。它不会创建变量。假设您的play()
函数是您第一次定义Rock
、Paper
和Scissors
,您必须首先在任何函数之外创建 3 个变量,如下所示:
Rock = None
Paper = None
Scissors = None
然后在你的choose()
函数中,添加全局变量,如下所示:
def choose(choice):
global Rock
global Paper
global Scissors
if choice == "rock":
Paper.destroy()
Scissors.destroy()
推荐阅读
- java - Kubernate Pod:如何将证书导入 Java 信任库?
- python - 如何对包含日期作为子字符串的字符串列表进行排序
- javascript - 在 Angular Material 自定义字段组件中禁用不起作用
- python - 如何在 Pandas 中绘制条形图?
- git - DevOps - Mac M1:Git 停止工作 - 致命:无法访问共享锁文件
- linux - 从 Windows 进行 ssh-remote 后无法在 linux 上打开 vscode 编辑器
- python - Django 'ListBlogPost' 对象没有属性 'get_object'
- powerbi - Power BI 前 x 天
- angular - 更新到 Angular 12 后未调用 CanActivate
- angular - 重定向htaccess角度