使用tkinter创建按钮网格并要求用户选择特定按钮

时间:2017-04-03 23:10:41

标签: python-3.x button tkinter

我尝试创建一个创建按钮网格的程序,然后要求用户选择特定按钮。

如果用户选择了正确的按钮,则该按钮被禁用,程序会询问用户另一个随机按钮,直到整个网格被填满。如果用户选择了错误的按钮,则没有任何反应(或者可能出现错误标签)。

我的想法是,我将创建一个类,其中每个按钮都有一个行和列属性,当单击一个按钮时,它会调用一个函数,将当前按钮的行和列与所需的行进行比较和专栏。

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。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用functools.partial将参数烘焙到命令功能中。

from functools import partial
self.button = Button(command = partial(self.checkButtonPos, rowPosition, colPosition))

这意味着当按下按钮时,它会将行和列作为参数传递。换句话说,点击该按钮会运行self.checkButtonPos(rowPosition, colPosition)(而不仅仅是self.checkButtonPos())。

顺便说一句,我很高兴你正在学习课程,但在这种情况下,课程没有增加任何价值。