- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个游戏。它工作得很好,所以我想我应该添加一个屏幕来改变“子弹”的颜色。我创建了窗口,我分配了变量,我全局化了我需要的那些变量,但是我不断收到错误,说该变量尚未定义,但该变量下已定义且来自同一“shop”函数的其他变量是定义的。如果我摆脱正常状态,只有 FireGun 和 LaserGun FireGun 未定义。很难解释。所以看看我已经简化了很多的代码,看看你是否能找出任何错误。
from tkinter import *
def MainMenu():
self = Tk()
self.btnShops = Button(text ="Shop")
self.btnShops.pack()
def startShops(event):
self.destroy()
Shop()
self.btnShops.bind('<Button>',startShops)
self.geometry("830x700")
self.title("Space Assault")
self.configure(bg="black")
def Shop():
self = Tk()
normal = 1
fire = 0
laser = 0
def FireGun(event):
global fire
global normal
global laser
fire = 1
normal = 0
laser = 0
def LaserGun(event):
global laser
global fire
global normal
laser = 1
fire = 0
normal = 0
self.btnfireGun = Button(text="Fire Gun")
self.btnfireGun.pack()
self.btnlaser = Button(text = "Laser Gun")
self.btnlaser.pack()
self.btnMainMenu = Button(text="Main Menu")
self.btnMainMenu.pack()
#Bind
self.btnfireGun.bind('<Button>',FireGun)
self.btnlaser.bind('<Button>', LaserGun)
self.btnMainMenu.bind('<Button>',StartMainMenu)
#Frame settings
self.geometry("830x700")
self.title("Space Assault Shop")
self.configure(bg="black")
def singleplayergame():
def Shoot(event):
global normal
global fire
global laser
self.shot = Canvas(bg="black",highlightthickness=0,width=10,height=10)
self.shot.place(x=shotXpos,y=shotYpos)
if normal == 1:
self.shot.create_oval(0,0,10,10,fill=random.choice(COLORS))
elif fire == 1:
self.shot.create_oval(0,0,10,10,fill='red')
elif laser == 1:
self.shot.create_oval(0,0,10,10,fill='blue')
MainMenu()
如果我点击 FireGun 按钮,子弹就会正常工作,并且会像平常一样显示为红色。但是,如果我想要它“正常”,它甚至不会触发任何东西。希望这是有道理的。我认为这与全局经济减速有关,但我真的坚持这一点。
最佳答案
发生了很多事情。
你不应该像这样嵌套函数。如果您试图封装数据/结构,那么只需使用一个类。您似乎想通过命名 Tk()
self 并在各处调用 self 来使用它。这实际上只是为 Tk 设置了一堆属性。
您正在创建 Tk()
的多个实例。如果您想要新窗口,请使用 Toplevel()
小部件。否则,只需使用 pack_forget
/grid_forget
来隐藏您想要的框架/小部件,并使用 pack/grid 来“取消隐藏”其他框架/小部件以在网格上替换它们。
不需要运行多个 Tk() 实例。
你永远不会调用mainloop
。
您正在对变量调用global
,这是不必要的,您可以重构。如果您使用全局变量 9/10,您将获得 XY problem 。它们实际上根本就不是全局性的。它们是您嵌套的函数的本地函数。如果您确实想要这种结构,则可以使用nonlocal
。再说一次,如果您想要这样的结构,只需使用一个类并将它们保留为属性。
无需在所有按钮上使用 bind
只是为了在单击时调用函数。这就是 command
参数的用途。
关于python - 全局变量没有传递,说它不被识别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36991211/
我正在编写一个 JS 程序,我有一个条件可以根据输入进行一些算术运算。如果我遇到操作类型为“add”,我需要将两个值相加;如果我得到“times”作为我的运算符值,我需要相乘。 我尝试使用基本的 if
我正在编写一个仅作为查看器的应用程序 - 无需创建、无需编辑、无需保存。 显然,那么,不会有自动保存,但是还有什么其他东西可以从 autosavesInPlace 返回 YES 改变世界,从而对观看者
Azure 开始出现以下错误: Unsupported token. Unable to initialize the authorization context. 每当我尝试更改我的应用程序时,我都
当我编写 out.println() 时,Eclipse 提示 out 无法解析。 我导入了 java.io.* 和其他 servlet 包。 最佳答案 只是在黑暗中拍摄,我认为这就是您正在寻找的出路
Azure 开始出现以下错误: Unsupported token. Unable to initialize the authorization context. 每当我尝试更改我的应用程序时,我都
是否可以执行类似的操作来检查 radio 表单是否未选中: if !($(this).find("input:checked")) {} 正确的语法是什么? 最佳答案 试试这个: $(this).fi
我正在尝试从表中选择行,其中 date 列值等于澳大利亚悉尼的当前日期 (UTC+10h)。服务器位于悉尼,因此我想使用 SYSDATETIME()。这是我的查询: SELECT * FROM dat
我听说 JavaScript 实际上并不像其他语言那样“指向”内存中的值(或对象,因为在 JS 中一切都是对象)。相反,JS 变量引用内存中的其他值/对象。这是真的?指向和引用之间的语义区别是什么?
我的计算机科学类(class)有一项作业,其中要求读取包含多个测试分数的文件,并要求我对它们进行求和并求平均值。虽然求和和求平均值很容易,但我在读取文件时遇到问题。老师说用这个语法 Scanner s
Java 的 XML 解析器似乎认为我的 XML 文档在根元素之后的格式不正确。但我已经用几种工具验证了它,但他们都不同意。这可能是我的代码错误,而不是文档本身的错误。如果你们能给我提供任何帮助,我将
根据这份文件: http://www.stroustrup.com/terminology.pdf l 值具有同一性且不可移动。 公关值是可移动的,但没有身份。 x 值具有同一性并且是可移动的。 关于
这个问题在这里已经有了答案: What does "atomic" mean in programming? (7 个答案) 关闭 5 年前。 我正在阅读 MongoDB 的 documentati
在 PHP 和 MySQL 中有没有一种方法能够比较 2 个不同的数组(列表)变量并说出有多少项是相同的 例如, $array1 = "hello, bye, google, laptop, yes"
本文来自 Effective Java Programs that use the int enum pattern are brittle. Because int enums are compil
C++ 中有一些特性是类型安全的,而另一些则不是。 C++ 类型安全示例: char c = 'a'; int *p = &c; // this is not allowed (compiler
我有一个 CS 课的作业,它说要读取一个包含多个测试分数的文件,并要求我对它们求和并取平均值。虽然求和和平均很容易,但我在读取文件时遇到了问题。老师说要用这个语法 Scanner scores = n
嗯.. 有时,PyDev 会说“ Unresolved 导入错误”。 在我的环境中 Python2.6.6 Eclipse3.7 PyDev2.2.2 错误是。 > Unresolved import
我正在向服务器发送请求,服务器正在处理请求并做出响应。但是在我的应用程序中,我收到了: Error Domain=NSURLErrorDomain Code=-1017 "cannot parse r
在我最近的一次讨论中,有人告诉我这样说是不正确的,因为 Ajax 已经是 Javascript。 上下文: “我如何在网页中 blablababal,这样它就不必刷新页面” 我的回答: “使用 Jav
下午好。 我一直在尝试使用 ffmpeg 将 .mpeg 拆分为一系列 .jpeg 图像。请注意,这是指定 here 的逆问题,但我面临的问题与该线程的作者面临的问题不同。 具体来说,我已经在我的 f
我是一名优秀的程序员,十分优秀!