首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >销毁()而不是重复销毁

销毁()而不是重复销毁
EN

Stack Overflow用户
提问于 2016-04-23 04:03:40
回答 1查看 40关注 0票数 1

我的代码创建了一个带有3个输入框和3个按钮的Tk窗口。单击按钮时,相邻的输入框和按钮本身就会消失。我想用毁灭因为我不再使用它了。问题是,它第一次工作在任何按钮/入口组件上,但当我在一个按钮销毁后单击其他任何按钮时,其他按钮都不会销毁。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-23 06:48:42

您之所以面临这个问题,是因为在这些方法中:betE()betST()betW(),您称之为无用的suitWindow(),它根据复杂的if条件重新绘制组件。

解决方案是首先使用suitWindow()绘制小部件,根据self.numPlayersself.bettedEself.bettedSself.bettedWself.betCount标志的值和状态消除所有if条件:

代码语言:javascript
复制
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()方法。因此,剩下的三种方法成为:

代码语言:javascript
复制
    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()

全程序

随着代码的减少,程序变得不那么复杂了:

代码语言:javascript
复制
'''
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36806501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档