所以我正在制作一个“游戏”,每个单元格中都有一个从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()