grid()/ grid_remove()函数不是我所期望的

时间:2017-12-11 19:04:16

标签: python tkinter grid hide

所以我正在制作一个“游戏”,每个单元格中都有一个从1到9的随机数的网格。当你在一个单元格上移动光标,并按下键盘上写入单元格的数字时,它应该会消失,另一个单元格应该重新出现。我正在尝试使用grid_remove()来隐藏对象,并使用grid()来显示它,但它不会像我希望的那样工作。首先我制作一个3x3网格,然后删除它的一些单元格,但是显示的单元格可以移动到隐藏的单元格中,我会避​​免这种情况。在这段代码中,我在每个单元格中写入索引(而不是随机数1-9)。我在开头突出显示了代码的一部分,我在程序开始时删除了单元格,然后我通过整个代码。

选择要删除的索引(我认为应该没问题):

exist=[]
t=0
for k in range(0,int((2*size*size)/3)):
    while t in exist:
        t=randint(0,size*size-1)
    print(t)
    exist.append(t)

在制作之后立即删除一些细胞:

button[index].grid(row=i, column=j)
if index in exist:
    button[index].grid_remove()

最后我的整个代码:

from random import randint
import tkinter
from tkinter import Button
from tkinter import font
top = tkinter.Tk()
top.title("Game")
top.geometry("500x500")

class table:                            
    def __init__(self,size):            
        self.size=size
        index=0
        def onClick(index):
            if button[index].cget("bg")=="Red":
                button[index].config(bg="Blue")
            else:
                button[index].config(bg="Red")
        def key(event):
            if event.widget.cget("text")==event.char:
                event.widget.config(text=str(randint(1,9)))
                event.widget.show=False
                f=randint(0,size*size-1)
                if not button[f].winfo_exists():
                    button[f].grid()  #row=int(f/size), column=f%size
        def enter(event):
            event.widget.focus_set()
        def leave(event):
            event.widget.config(bg="Red")
        button=[]
        exist=[]
        t=0
        for k in range(0,int((2*size*size)/3)):
            while t in exist:
                t=randint(0,size*size-1)
            print(t)
            exist.append(t)
        for i in range(0, size):        
            for j in range (0,size):
                button.append(Button(top,command=lambda index=index: onClick(index),height=5,width=10,bg="Red",font=5,text=str(index)))
                button[index].bind("<Key>",key)
                button[index].bind("<Enter>",enter)
                button[index].bind("<Leave>",leave)
                button[index].grid(row=i, column=j)
                if index in exist:
                    button[index].grid_remove()
                index=index+1    
racs=table(3)
top.mainloop()

0 个答案:

没有答案