Python 3.x 如何在TKinter中创建按钮侦听器
我正在尝试制作一个simon says游戏,但在收集用户选择与计算机模式进行比较时遇到了困难。我用四个按钮来选择屏幕上闪烁的颜色。我遇到的问题是,即使我的用户还没有选择颜色,我的程序仍在继续运行,尽管我尽了最大努力阻止它,但我能做些什么来停止程序?这是我的密码Python 3.x 如何在TKinter中创建按钮侦听器,python-3.x,tkinter,Python 3.x,Tkinter,我正在尝试制作一个simon says游戏,但在收集用户选择与计算机模式进行比较时遇到了困难。我用四个按钮来选择屏幕上闪烁的颜色。我遇到的问题是,即使我的用户还没有选择颜色,我的程序仍在继续运行,尽管我尽了最大努力阻止它,但我能做些什么来停止程序?这是我的密码 Sequence[] PosColors = ["Yellow","Red","Blue","Green"] PlayerChoice[] Score = 0 def Game(Sequence,
Sequence[]
PosColors = ["Yellow","Red","Blue","Green"]
PlayerChoice[]
Score = 0
def Game(Sequence, PlayerChoice,Score):
Score += 1
PlayerChoice = []
Number = randint(0,3)
Sequence.append(PosColors[Number])
for i in Sequence:
RunTime = Score * 1000
Gui.after(1000, blink, rect, SquareCanvas , i)
RunTime = (Score + 1) * 1000
Gui.after(2000, blink, rect, SquareCanvas , White)
X = len(Sequence)
Index = 0
Color = " "
while Color != " ":
BlueButton.config(command = partial(setSelection,NeonBlue))
RedButton.config(command = partial(setSelection,NeonRed))
YellowButton.config(command = partial(setSelection,NeonYellow))
GreenButton.config(command = partial(setSelection,NeonGreen))
Color = getSelection()
print(Color)
while Color != " ":
PlayerTurn(Sequence,PlayerChoice,Score,Index)
X -= 1
Index +=1
def setSelection(Color):
if Color == NeonBlue:
return "NeonBlue"
elif Color == NeonRed:
return "NeonRed"
elif Color == NeonGreen:
return "NeonGreen"
elif Color == NeonYellow:
return "NeonYellow"
def getSelection():
return TheColor
def PlayerTurn(Sequence, PlayerChoice,Score,Index):
PlayerChoice.append(Color)
print(PlayerChoice)
Label1.config(text = 'Well done! \nYou advance to the next round!')
我计划通过一个检查器,并循环它,直到有一个错误,但我需要通过这个前循环第一。。。我知道我的逻辑是有效的,因为我只使用列表和命令行来创建它,在继续图形部分之前,我只需要知道如何让程序停止以收集用户猜测,特别是当模式的长度变大时。最初我有命令功能,包括后来我建立我的按钮,但这个位置似乎得到尽可能接近我所寻找的。非常感谢您的帮助,谢谢您需要重新考虑您的主要程序逻辑。Tkinter的设计使您永远不会拥有自己的无限循环。Tkinter已经有一个无限循环——根窗口的mainloop方法。不能编写等待用户输入的逻辑。您必须将GUI视为处于永久等待状态,并且需要设置处理程序按钮回调或事件绑定以对事件作出反应
您还需要了解按钮命令不能返回任何内容。不能有点强,因为它显然可以,但没有什么等待结果-没有地方可以返回。您需要设计按钮函数,以便它设置全局变量或实例变量 这是我的代码段需要获得用户输入,我可以张贴所有的代码,如果你愿意…非常感谢你的输入。。。如果我添加了一个event handler=False,然后当Color变量不相等时将其设置为True,这是否可行。那么,真实事件是否允许程序进入PlayerTurn序列?@Schneemanch:不,我不这么认为。我认为没有简单的解决办法。就像我说的,你需要重新思考主要的逻辑。您必须删除所有while循环,并在将按钮配置为调用它们需要调用的任何函数后,在对mainloop的一次调用中全部替换它们。