destroy()不会破坏重复
问题描述:
我的代码创建一个Tk
窗口,其中包含3个输入框和3个按钮。当点击一个按钮时,相邻的输入框和按钮本身应该消失。我想用摧毁,因为我不再使用它。问题在于它在任何按钮/入口组件上都是第一次工作,但是当我在其中一个销毁后单击其他任何按钮时,其他按钮都不会销毁。destroy()不会破坏重复
class BlackjackTable:
def __init__(self,numPlayers):
self.numPlayers=numPlayers
self.tableWindow=Tk()
self.bettedE=False
self.bettedS=False
self.bettedW=False
self.betCount=0
self.suitWindow()
def suitWindow(self):
self.tableWindow.title("Blackjack Table")
self.tableWindow.config(bg="dark green")
if int(self.betCount)!=int(self.numPlayers) and (not self.bettedE):
self.EHandEntry=Entry(self.tableWindow,fg="white",bg="dark green",width=10)
self.EHandEntry.grid(row=5,column=9)
self.EHandSubmit=Button(self.tableWindow,text="Bet",fg="white",padx=15,pady=5,command=self.betE,bg="dark green",activebackground="dark green",activeforeground="white")
self.EHandSubmit.grid(row=5,column=10)
if self.numPlayers>=2:
if (self.betCount!=self.numPlayers) and (not self.bettedS):
self.SHandEntry=Entry(self.tableWindow,fg="white",bg="dark green",width=10)
self.SHandEntry.grid(row=8,column=6)
self.SHandSubmit=Button(self.tableWindow,text="Bet",fg="white",padx=15,pady=5,command=self.betST,bg="dark green",activebackground="dark green",activeforeground="white")
self.SHandSubmit.grid(row=8,column=7)
if self.numPlayers==3:
if (self.betCount!=self.numPlayers) and (not self.bettedW):
self.WHandEntry=Entry(self.tableWindow,fg="white",bg="dark green",width=10)
self.WHandEntry.grid(row=5,column=3)
self.WHandSubmit=Button(self.tableWindow,text="Bet",fg="white",padx=15,pady=5,command=self.betW,bg="dark green",activebackground="dark green",activeforeground="white")
self.WHandSubmit.grid(row=5,column=4)
def betE(self):
print("betE")
self.bettedE=True
self.EHandSubmit.destroy()
self.EHandEntry.destroy()
self.suitWindow()
self.betCount+=1
def betST(self):
print("betST")
self.bettedS=True
self.SHandSubmit.destroy()
self.SHandEntry.destroy()
self.suitWindow()
self.betCount+=1
def betW(self):
print("betW")
self.bettedW=True
self.WHandSubmit.destroy()
self.WHandEntry.destroy()
self.suitWindow()
self.betCount+=1
gui=BlackjackTable(3)
mainloop()
答
您遇到这个问题,因为这些方法里面:betE()
,betST()
和betW()
你叫白白suitWindow()
其重绘基于复杂if
条件componenents。
的解决方案是,你通过摆脱的基础上,self.numPlayers
,self.bettedE
,self.bettedS
,self.bettedW
和self.betCount
标志的价值观和国家所有的if
条件绘图使用suitWindow()
您的小部件开始:
def suitWindow(self):
self.tableWindow.title("Blackjack Table")
self.tableWindow.config(bg="dark green")
self.EHandEntry=Entry(self.tableWindow,fg="white",bg="dark green",width=10)
self.EHandEntry.grid(row=5,column=9)
self.EHandSubmit=Button(self.tableWindow,text="Bet",fg="white",padx=15,pady=5,command=self.betE,bg="dark green",activebackground="dark green",activeforeground="white")
self.EHandSubmit.grid(row=5,column=10)
self.SHandEntry=Entry(self.tableWindow,fg="white",bg="dark green",width=10)
self.SHandEntry.grid(row=8,column=6)
self.SHandSubmit=Button(self.tableWindow,text="Bet",fg="white",padx=15,pady=5,command=self.betST,bg="dark green",activebackground="dark green",activeforeground="white")
self.SHandSubmit.grid(row=8,column=7)
self.WHandEntry=Entry(self.tableWindow,fg="white",bg="dark green",width=10)
self.WHandEntry.grid(row=5,column=3)
self.WHandSubmit=Button(self.tableWindow,text="Bet",fg="white",padx=15,pady=5,command=self.betW,bg="dark green",activebackground="dark green",activeforeground="white")
self.WHandSubmit.grid(row=5,column=4)
一旦这些小部件被绘制出来,就像你一样使用destroy()
,并忘记了suitWindow()方法。因此,剩下的三个方法变成:
def betE(self):
print("betE")
self.bettedE=True
self.EHandSubmit.destroy()
self.EHandEntry.destroy()
def betST(self):
print("betST")
self.bettedS=True
self.SHandSubmit.destroy()
self.SHandEntry.destroy()
def betW(self):
print("betW")
self.bettedW=True
self.WHandSubmit.destroy()
self.WHandEntry.destroy()
全部程序
你的程序变得那么复杂为你的代码少:
'''
Created on Apr 23, 2016
@author: billal begueradj
'''
from tkinter import *
class BlackjackTable:
def __init__(self,numPlayers):
self.numPlayers=numPlayers
self.tableWindow=Tk()
self.bettedE=False
self.bettedS=False
self.bettedW=False
self.suitWindow()
def suitWindow(self):
self.tableWindow.title("Blackjack Table")
self.tableWindow.config(bg="dark green")
self.EHandEntry=Entry(self.tableWindow,fg="white",bg="dark green",width=10)
self.EHandEntry.grid(row=5,column=9)
self.EHandSubmit=Button(self.tableWindow,text="Bet",fg="white",padx=15,pady=5,command=self.betE,bg="dark green",activebackground="dark green",activeforeground="white")
self.EHandSubmit.grid(row=5,column=10)
self.SHandEntry=Entry(self.tableWindow,fg="white",bg="dark green",width=10)
self.SHandEntry.grid(row=8,column=6)
self.SHandSubmit=Button(self.tableWindow,text="Bet",fg="white",padx=15,pady=5,command=self.betST,bg="dark green",activebackground="dark green",activeforeground="white")
self.SHandSubmit.grid(row=8,column=7)
self.WHandEntry=Entry(self.tableWindow,fg="white",bg="dark green",width=10)
self.WHandEntry.grid(row=5,column=3)
self.WHandSubmit=Button(self.tableWindow,text="Bet",fg="white",padx=15,pady=5,command=self.betW,bg="dark green",activebackground="dark green",activeforeground="white")
self.WHandSubmit.grid(row=5,column=4)
def betE(self):
print("betE")
self.bettedE=True
self.EHandSubmit.destroy()
self.EHandEntry.destroy()
def betST(self):
print("betST")
self.bettedS=True
self.SHandSubmit.destroy()
self.SHandEntry.destroy()
def betW(self):
print("betW")
self.bettedW=True
self.WHandSubmit.destroy()
self.WHandEntry.destroy()
gui=BlackjackTable(3)
mainloop()