所以我正在创建一个数独游戏,并生成了一个9x9的按钮网格。有两个难度级别 - 简单和困难。选择难度级别时,会在某些按钮上随机生成数字。然后,用户单击空按钮以更改/设置一个数字(每次单击将数字增加1)。但是,用户也可以更改生成的数字。有什么方法可以阻止这个。我设法通过在我的按钮生成器中添加if语句来阻止它,但是当我添加难度级别并将代码分离为函数时,我不再能够阻止它。
这是我的按钮生成器代码:
def ButtonGenerator():
for row_index in range(9):
for col_index in range(9):
if (row_index in {0, 1, 2, 6, 7, 8} and col_index in {3, 4, 5}) or \
(row_index in {3, 4, 5} and col_index in {0, 1, 2, 6, 7, 8}): #Colours a group of 3x3 buttons together to differentiate the board better.
colour = 'gray85'
else:
colour = 'snow'
btn = Button(frame, width = 10, height = 5, bg=colour, font=font1) #create a button inside frame
btn.grid(row=row_index, column=col_index, sticky=N+S+E+W)
global buttons
buttons.append(btn)
这是我的左键单击事件功能:
def LeftClick(event):
next_value = " 123456789 "
try:
current_value = next_value[next_value.index(str(int(event.widget['text']))) + 1]
except ValueError:
current_value = "1"
event.widget.config(text=current_value, font=font1)
我还试图创建一个函数来停止使用预生成值的数字被用户更改,但它不起作用。任何想法为什么??
def Checker():
for row in range(9):
for col in range(9):
for btn in buttons:
if btn.cget("text") != "":
btn.bind("<Button-1>", LeftClick)
else:
btn.config(font=font2)
break
答案 0 :(得分:0)
它不能解决您的问题,但它显示了我将如何组织数据和代码 - 也许它可以帮助您解决问题。
首先:我将数据保存在词典中,以便我可以轻松使用data["easy"]
或data["hard"]
(与solved["easy"]
相同)或使用变量data[difficalty]
和{{1} }
下一步:对于空按钮,我使用solved[difficalty]
代替0
。我在按钮""
中使用自己的字段来保留此值。接下来,我可以轻松地计算下一个值(模10)并在值为0时放入空字符串。
开始时,我使用空按钮创建电路板(b.value
)并使用函数使用all_buttons
重置按钮参数。这样我就可以轻松改变困境。
zip(all_buttons, data["easy"])