2016-04-23 8 views
1

Mein Code erstellt ein Tk Fenster mit 3 Eingabefeldern und 3 Tasten. Wenn auf eine Schaltfläche geklickt wird, sollte das angrenzende Eingabefeld und die Schaltfläche selbst verschwinden. Ich möchte zerstören, weil ich es nicht wieder benutze. Das Problem ist, dass es das erste Mal auf einer der Schaltflächen/Eingabe-Komponenten funktioniert, aber wenn ich auf einen der anderen Knöpfe klicke, nachdem einer zerstört wurde, wird keiner der anderen zerstören.destroy() nicht auf Wiederholungen zu zerstören

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

Antwort

1

Sie konfrontiert das Problem, weil in diesen Methoden: betE(), betST() und betW() Sie unnütz suitWindow() nennen, das die componenents aufgrund erschwerter if Bedingungen neu gezeichnet.

Die Lösung ist, dass Sie durch Ziehen Ihre Widgets mit suitWindow() durch loszuwerden alle if Bedingungen auf der Grundlage der Werte und Zustände von self.numPlayers, self.bettedE, self.bettedS, self.bettedW und self.betCount Flaggen beginnen:

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) 

Einmal Diese Widgets werden gezeichnet, verwenden Sie einfach destroy() wie Sie und vergessen Sie die suitWindow() -Methode. So sind die drei verbleibenden Methoden werden:

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

Volles Programm

Ihr Programm wird weniger kompliziert wie Sie codieren weniger:

''' 
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() 
Verwandte Themen