我尝试创建一个创建按钮网格的程序,然后要求用户选择特定按钮。
如果用户选择了正确的按钮,则该按钮被禁用,程序会询问用户另一个随机按钮,直到整个网格被填满。如果用户选择了错误的按钮,则没有任何反应(或者可能出现错误标签)。
我的想法是,我将创建一个类,其中每个按钮都有一个行和列属性,当单击一个按钮时,它会调用一个函数,将当前按钮的行和列与所需的行进行比较和专栏。
from tkinter import *
class gridButtons():
def __init__(self,rowPosition, colPosition,masterFrame):
self.rowPosition = rowPosition
self.colPosition = colPosition
self.button = Button(masterFrame,text = str(self.colPosition)+","+str(self.rowPosition),command = self.checkButtonPos,width=5)
self.button.grid(row = self.rowPosition,column = self.colPosition,padx=3, pady=3)
root = Tk()
buttonFrame = Frame(root)
buttonFrame.pack()
buttonList = []
for r in range(10):
for c in range(10):
buttonToCreate = gridButtons(r,c,buttonFrame)
buttonList.append(buttonToCreate)
root.mainloop()
我的主要问题是如何考虑创建checkButtonPos命令。让我们说我们希望用户第一次按下带坐标的按钮(第3行,第4列),如果按下该按钮,则会出现一个新坐标,直到所有按钮都被点击为止。我在考虑以下内容:
def checkButtonPos(requiredRow,requiredCol):
buttonColPosition = self.colPosition
buttonRowPosition = self.rowPosition
if buttonColPosition == requiredCol and buttonRowPosition == requiredRow:
self.config(text = "Yes",state = DISABLED)
我不确定每次用户选择正确的按钮时如何更改requiredRow和requiredCol。
提前感谢您的帮助!
答案 0 :(得分:0)
您可以使用functools.partial
将参数烘焙到命令功能中。
from functools import partial
self.button = Button(command = partial(self.checkButtonPos, rowPosition, colPosition))
这意味着当按下按钮时,它会将行和列作为参数传递。换句话说,点击该按钮会运行self.checkButtonPos(rowPosition, colPosition)
(而不仅仅是self.checkButtonPos()
)。
顺便说一句,我很高兴你正在学习课程,但在这种情况下,课程没有增加任何价值。