2016-04-23 14 views
1

私のコードは、3つの入力ボックスと3つのボタンでTkウィンドウを作成します。ボタンをクリックすると、隣接する入力ボックスとボタン自体が消えるはずです。私は再び使用しないので、破壊を使用したい。問題は、ボタン/エントリコンポーネントのいずれかで初めて動作するが、他のボタンがクリックされた後に他のボタンがクリックされた場合、他のボタンは破棄されないということです。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() 

答えて

1

あなたは、これらのメソッドの内部でその問題に直面した:あなたは、複雑なif条件に基づいてcomponenentsを再描画した無駄suitWindow()を呼び出すbetW()betE()betST()と。一度

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) 

ソリューションは、あなたがself.numPlayersself.bettedEself.bettedSself.bettedWself.betCountフラグの値や状態に基づいて、すべてのif条件を取り除くことでsuitWindow()を使用して、あなたのウィジェットを描画することによって開始することですこれらのウィジェットは描画され、suitWindow()メソッドについては忘れてしまったので、destroy()を使用してください。したがって、残りの3つの方法は次のようになります。

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() 
関連する問題