Ich möchte meine "Quit" -Taste, um das Fenster zu schließen und das Programm zu beenden, egal, wenn es gedrückt wird. Momentan funktioniert es, wenn es zuerst gedrückt wird, aber wenn die "Roll" -Taste zuerst gedrückt wird, dann schließt die "Quit" -Taste das Fenster nicht. Ich bin ein Anfänger-Programmierer, also bin ich mir sicher, dass es nicht verwandte Probleme mit meinem Code gibt, aber danke im Voraus, wenn Sie mir mit diesem speziellen Problem helfen können!Python Tkinter - Quit Taste funktioniert nicht, wenn andere Taste zuerst geklickt
from Tkinter import *
from random import randint
class Application(Frame):
def displayBoard(self):
self.canvas1 = Canvas(self, width=200, height=200)
self.canvas1.pack()
self.canvas2 = Canvas(self, width=200, height=200)
self.canvas2.pack()
self.roll_button = Button(self, text="Roll the Dice", command=self.roll)
self.roll_button.pack()
self.clear = Button(self, text="Clear", command=self.resetBoard)
self.clear.pack()
self.quit = Button(self, text="Quit", command=self.quit)
self.quit.pack()
def __init__(self, master=None):
Frame.__init__(self, master)
Pack.config(self)
def roll(self):
die1 = faces[(randint(1,6)-1)]
die2 = faces[(randint(1,6)-1)]
self.resetBoard()
self.canvas1.create_text(20, 30, anchor=W, text=die1)
self.canvas1.pack()
self.canvas2.create_text(20, 30, anchor=W, text=die2)
self.canvas2.pack()
def resetBoard(self):
self.canvas1.destroy()
self.canvas2.destroy()
self.clear.destroy()
self.roll_button.destroy()
self.quit.destroy()
self.displayBoard()
def quit(self):
self.master.quit()
self.master.destroy()
master = Tk()
face1 = """\n
__________
| |
| |
| () |
| |
|__________|
"""
face2 = """\n
__________
| |
| () |
| |
| () |
|__________|
"""
face3 = """ \n
__________
| |
| () |
| () |
| () |
|__________|
"""
face4 = """\n
__________
| |
| () () |
| |
| () () |
|__________|
"""
face5 = """ \n
__________
| |
| () () |
| () |
| () () |
|__________|
"""
face6 = """ \n
__________
| |
| () () |
| () () |
| () () |
|__________|
"""
faces = [face1, face2, face3, face4, face5, face6]
dicegame = Application()
dicegame.displayBoard()
dicegame.mainloop()
Versuchen Sie 'beenden Umbenennen()' Funktion ; Wenn Sie versuchen, das Board zurückzusetzen, kann es sein, dass "self.quit" ein 'Button' ist und den Button als seine Aktion aufruft. Könnte eine interne tote Referenz werfen, die nur zum Schweigen gebracht wird oder so. – Delioth
@Delioth: Genau das passiert. 'self.quit' bedeutet verschiedene Dinge zu verschiedenen Zeiten in diesem Code. –