2017-05-26 70 views
0

我试图做一个tic tack tack toe游戏,但我似乎无法弄清楚如何删除一个按钮,与另一个。我试着将函数输入到pack_forget和grid_forget,但都给我错误。代码如下使用按钮摧毁另一个使用Tkinter

import turtle 
from turtle import * 
from tkinter import * 

root =Tk() 
turtle.screen = Screen() 
i = 360 
up = Turtle() 
up.forward(180) 
up.back(360) 
up.forward(360/3) 
up.right(90) 
up.forward(180) 
up.back(275) 
up.forward(95) 
up.left(90) 
up.forward(360/3) 
up.right(90) 
up.forward(180) 
up.back(275) 
up.forward(275-180+90) 
up.right(90) 
up.forward(360/3*2) 
up.back(360) 

def TopLeftO(event): 
    topleft = True 
    i = 360 


    up.seth(180) 
    up.up() 
    up.goto(-100,20) 
    while i > 0: 
     up.down() 
     up.speed(0) 
     up.forward(0.5) 
     up.right(1) 
     i-=1 
    i=360 
    event.widget.pack_forget() 
    #insert function to delete 2nd button 
def TopLeftX(event): 
    topleft = True 




    up.up() 
    up.goto(-100,20) 
    up.seth(0) 
    up.down() 
    up.left(45) 
    up.forward(30+20) 
    up.back(15+10) 
    up.right(90) 
    up.forward(15+20) 
    up.back(30+40) 
    event.widget.pack_forget() 
    #insert code to delete first button 



toplefto = Button(root, text = "top left for player O"); 
toplefto.bind('<Button-1>', TopLeftO) 
toplefto.pack() 
topleftx = Button(root, text = "top left for player X") 
topleftx.bind('<Button-1>', TopLeftX) 
topleftx.pack() 



root.mainloop() 

回答

1

功能TopLeftX和按钮topleftx有相似的名称。拨打电话topleftx.pack_forget()将删除该按钮,呼叫TopLeftX.pack_forget()将引发错误。将您的变量和函数重命名为不同的名称将有助于消除混淆。

它也可能有助于查看python中的2维列表来存储按钮。

我将按钮移除移动到回调开始附近,因此一个人不能点击另一个。

import turtle 
from turtle import * 
from tkinter import * 

root =Tk() 
turtle.screen = Screen() 
i = 360 
up = Turtle() 
up.forward(180) 
up.back(360) 
up.forward(360/3) 
up.right(90) 
up.forward(180) 
up.back(275) 
up.forward(95) 
up.left(90) 
up.forward(360/3) 
up.right(90) 
up.forward(180) 
up.back(275) 
up.forward(275-180+90) 
up.right(90) 
up.forward(360/3*2) 
up.back(360) 


toplefto = Button(root, text = "top left for player O") 
topleftx = Button(root, text = "top left for player X") 

def TopLeftO(event): 
    topleft = True 
    i = 360 

    event.widget.pack_forget() 
    #insert function to delete 2nd button 
    topleftx.pack_forget() 

    up.seth(180) 
    up.up() 
    up.goto(-100,20) 
    while i > 0: 
     up.down() 
     up.speed(0) 
     up.forward(0.5) 
     up.right(1) 
     i-=1 
    i=360 

def TopLeftX(event): 
    topleft = True 

    event.widget.pack_forget() 
    #insert code to delete first button 
    toplefto.pack_forget() 

    up.up() 
    up.goto(-100,20) 
    up.seth(0) 
    up.down() 
    up.left(45) 
    up.forward(30+20) 
    up.back(15+10) 
    up.right(90) 
    up.forward(15+20) 
    up.back(30+40) 


toplefto.bind('<Button-1>', TopLeftO) 
toplefto.pack() 

topleftx.bind('<Button-1>', TopLeftX) 
topleftx.pack() 

root.mainloop() 
+0

谢谢,我没有想到使用常识,并提前按钮名称。谢谢 – Travis