Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用tkinter销毁每个按钮?_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 如何使用tkinter销毁每个按钮?

Python 如何使用tkinter销毁每个按钮?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我的目标是创建一个游戏,显示一手牌,并为每一轮纸牌游戏创建每张牌的按钮。问题是,程序创建了按钮,但从未删除它们,因此它们在循环之间堆叠。我已经尝试使用Winfou children在框架和每个单独的按钮上使用destroy函数。如何在每一轮之后最终清除按钮的主框架?我在下面复制了代码的相关部分。先谢谢你 class CardsFrame(Frame): def __init__(self, parent, hand): Frame.__init__(self,parent

我的目标是创建一个游戏,显示一手牌,并为每一轮纸牌游戏创建每张牌的按钮。问题是,程序创建了按钮,但从未删除它们,因此它们在循环之间堆叠。我已经尝试使用Winfou children在框架和每个单独的按钮上使用destroy函数。如何在每一轮之后最终清除按钮的主框架?我在下面复制了代码的相关部分。先谢谢你

class CardsFrame(Frame):
    def __init__(self, parent, hand):
        Frame.__init__(self,parent, width = 14)
        self.parent = root
        for card in hand:
            self.button = Button(self, text = card, width = 14)
            self.button.pack(side=BOTTOM)
    def killCards(self,parent):
        for widget in CardsFrame.winfo_children():
            widget.destroy()

def game():
    for widget in CardsFrame.winfo_children():
            widget.destroy()
    numCards = userInput.get()
    cardButtons = Frame(root)
    CardsFrame.killCards()
    if numCards.isdigit():
        if 0 <= int(numCards) <= 52:
            hand = deal(numCards)
            result1 = str(evaluate(hand))
            cardButtons = CardsFrame(root, hand)
            cardButtons.pack()
            for cards in hand:
                print('{0:5s}{1:18s}\n'.format(' ',cards), end='')
            print('{0:5s}{1:10s}{2:5s}{3:7s}\n'.format(' ', '---------> ', 'Score: ',result1, end=''))
        result = '{0:6s}{1:3s}'.format('Score: ', result1)
        result = Label(text = 'Score: ' + result1)
        score['text'] = 'Score: ' + result1
类别卡片框架(框架):
定义初始(自我、父母、手):
帧。\uuuuu init\uuuuuuu(自,父,宽度=14)
self.parent=root
对于手中的卡:
self.button=按钮(self,text=card,width=14)
自助式按钮包(侧面=底部)
def killCards(自身、父级):
对于CardsFrame.winfo_children()中的小部件:
widget.destroy()
def game():
对于CardsFrame.winfo_children()中的小部件:
widget.destroy()
numCards=userInput.get()
cardButtons=框架(根)
CardsFrame.killCards()
如果numCards.isdigit():

如果0尝试在
CardsFrame
类本身上调用各种方法,而不是在您创建的
CardsFrame
实例上调用。请注意,为了销毁按钮,您必须将该实例存储在当时仍然可用的位置-目前它只是一个局部变量,在函数结束时将消失。您需要首先理解OOP概念。您正在尝试调用
CardsFrame
类本身上的各种方法,而不是在您创建的
CardsFrame
实例上。请注意,为了销毁按钮,您必须将该实例存储在当时仍然可用的位置-目前它只是一个局部变量,在函数结束时将消失。您需要首先理解OOP概念。