2017-04-03 4 views
0

Ich versuche, ein Programm zu erstellen, das ein Raster von Schaltflächen erstellt, und fordert dann den Benutzer auf, bestimmte Schaltflächen auszuwählen.Erstellen eines Gitters von Schaltflächen mit tkinter und Fragen an den Benutzer zur Auswahl bestimmter Schaltflächen

Wenn der Benutzer die richtige Schaltfläche auswählt, wird diese Schaltfläche deaktiviert und das Programm fragt den Benutzer nach einer anderen zufälligen Schaltfläche, bis das gesamte Raster ausgefüllt ist. Wenn der Benutzer die falsche Schaltfläche auswählt, passiert nichts (oder vielleicht erscheint ein Fehler-Label).

Mein Gedankengang ist, dass ich eine Klasse wie unten erstellen werde, wo jede Schaltfläche ein Zeilen- und Spaltenattribut hat und wenn eine Schaltfläche angeklickt wird, ruft sie eine Funktion auf, die die aktuellen Schaltflächen Zeile und Spalte mit der erforderlichen Zeile vergleicht Säule.

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() 

Meine primäre Frage ist, wie ich über das Erstellen des checkButtonPos-Befehls nachdenken sollte. Nehmen wir an, wir möchten, dass der Benutzer die Schaltfläche mit den Koordinaten (Zeile 3, Spalte 4) das erste Mal drückt und wenn diese Schaltfläche gedrückt wird, erscheint eine neue Koordinate, bis alle Schaltflächen geklickt wurden. Ich war so etwas wie die folgenden denken:

def checkButtonPos(requiredRow,requiredCol): 
    buttonColPosition = self.colPosition 
    buttonRowPosition = self.rowPosition 

    if buttonColPosition == requiredCol and buttonRowPosition == requiredRow: 
     self.config(text = "Yes",state = DISABLED) 

Ich bin unsicher, wie ich würde die requiredRow ändern und requiredCol jedes Mal wählt der Benutzer die richtige Taste.

Vielen Dank für jede Hilfe im Voraus!

Antwort

0

Sie können Argumente in die Befehlsfunktion mit functools.partial backen.

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

Dies bedeutet, wenn die Taste gedrückt wird, übergibt die Zeile und Spalte als Argumente. Mit anderen Worten: Wenn Sie auf die Schaltfläche klicken, wird self.checkButtonPos(rowPosition, colPosition) (statt nur self.checkButtonPos()) ausgeführt.

Nebenbei bin ich froh, dass Sie über Klassen lernen, aber in diesem Fall fügt die Klasse keinen Wert hinzu.

Verwandte Themen