为什么tkinterbuttons会全部禁用?

2024-09-29 17:23:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在阅读一本Python初学者指南,我被tkinter的一个特殊任务困住了。我遵循了书中的代码,但似乎仍然无法正常工作:

这个游戏的目的是做一个猜谜游戏,按下两次按钮。如果用户在连续猜测两次后发现两个相同的符号,则这些按钮/符号将被禁用并保持可见。在另一种情况下,它们被隐藏起来,猜测又开始了问题是:按下按钮后,它们都保持可见。请参阅附件Screenshot of outcome

为了完成这段代码,我使用了jupyternotebook5.5.0,它与书中的其他练习配合得很好。我想知道是关于我正在使用的笔记本(这里的图形看起来也和书中的不同),还是只是代码中的一个bug

提前谢谢

import random
import time
from tkinter import Tk, Button, DISABLED 

def show_symbol(x, y): 

    global first 
    global previousX, previousY
    buttons[x, y]["text"] = button_symbols[x, y] 
    buttons[x, y].update_idletasks() 

    if first: 

        previousX = x 
        previousY = y
        first = False 

    elif previousX != x or previousY != y: 

        if buttons[previousX, previousY]["text"] != buttons[previousX, previousY]["text"]: 

            time.sleep(0.5) 
            buttons[previousX, previousY]["text"] = ""
            buttons[x, y]["text"] = ""

        else: 

            buttons[previousX, previousY]["command"] = DISABLED
            buttons[x, y]["command"] = DISABLED 

        first = True 

root = Tk()
root.title("Find a pair")
root.geometry("500x500") 
root.resizable(width=False, height=False) 

buttons = {}
first = True
previousX = 0 
previousY = 0 

button_symbols = {}
symbols = [u"\u2702", u"\u2702", u"\u2705", u"\u2705", u"\u2708", u"\u2708", u"\u2709", u"\u2709", u"\u270A", u"\u270A",
          u"\u270B", u"\u270B", u"\u270C", u"\u270C", u"\u270F", u"\u270F", u"\u2712", u"\u2712", u"\u2714", u"\u2714",
          u"\u2716", u"\u2716", u"\u2728", u"\u2728"]

random.shuffle(symbols)

for x in range(6): 

    for y in range(4):

        button = Button(command=lambda x=x, y=y: show_symbol(x, y), width=3, height=3)
        button.grid(column=x, row=y) 
        buttons[x, y] = button 
        button_symbols[x, y] = symbols.pop() 

root.mainloop()

Tags: 代码textimportfalsetkinterbuttonroot按钮
1条回答
网友
1楼 · 发布于 2024-09-29 17:23:38

下面的if语句将始终返回false,因为它正在检查本身是否不等于本身。一个简单的疏忽;)

if buttons[previousX, previousY]["text"] != buttons[previousX, previousY]["text"]: 

只需将其更改为以下内容:

if buttons[previousX, previousY]["text"] != buttons[x, y]["text"]: 

我测试了你的代码,它可以和这个变化一起工作

相关问题 更多 >

    热门问题