stoic 发表于 2020-4-9 12:48:29

显示旋转的电扇

#想显示宣传的电扇,先调用tkinter,制作了一个画布,绘制了一个静态的电扇,设置了一个按钮,希望调用zhuan()函数(通过循环,删除之前的电扇,绘制新电扇)想让它转起来。执行的时候,点按钮后一直没有转起来,是什么原因。有没有什么好的解决方案
from tkinter import *
class Fan:
    def __init__(self):
      window=Tk()
      self.canvas1=Canvas(window,width=500,height=500,bg="white")
      self.canvas1.pack()


      self.canvas1.create_arc(100, 100, 400, 400, start=0 , extent=20 , fill="red", tags="Arc1")
      self.canvas1.create_arc(100, 100, 400, 400, start=90 , extent=20 , fill="red", tags="Arc2")
      self.canvas1.create_arc(100, 100, 400, 400, start=180, extent=20 , fill="red", tags="Arc3")
      self.canvas1.create_arc(100, 100, 400, 400, start=270, extent=20 , fill="red", tags="Arc4")

      b1=Button(window,text="zhuan",command=self.zhuan)
      b1.pack()
      window.mainloop()


    def zhuan(self):
       i=0

       while True:
            self.canvas1.delete("Arc1","Arc2","Arc3","Arc4")
            self.canvas1.create_arc(100,100,400,400,start=i,extent=20,fill="red",tags="Arc1")
            self.canvas1.create_arc(100, 100, 400, 400, start=90 + i, extent=20 , fill="red", tags="Arc2")
            self.canvas1.create_arc(100, 100, 400, 400, start=180 + i, extent=20 , fill="red", tags="Arc3")
            self.canvas1.create_arc(100, 100, 400, 400, start=270 + i, extent=20, fill="red", tags="Arc4")
            i+=1

Fan()

wp231957 发表于 2020-4-9 13:24:00

没玩过这东东
你可以先把其他代码注释掉或者暂时删除,单独试一下delete好不好用

stoic 发表于 2020-4-9 14:38:01

wp231957 发表于 2020-4-9 13:24
没玩过这东东
你可以先把其他代码注释掉或者暂时删除,单独试一下delete好不好用

之前试过,好用~

snaker 发表于 2020-4-9 16:49:47

tkinter刷新一下就行了

from tkinter import *
class Fan:
    def __init__(self):
      self.window=Tk()
      self.canvas1=Canvas(self.window,width=500,height=500,bg="white")
      self.canvas1.pack()


      self.canvas1.create_arc(100, 100, 400, 400, start=0 , extent=20 , fill="red", tags="Arc1")
      self.canvas1.create_arc(100, 100, 400, 400, start=90 , extent=20 , fill="red", tags="Arc2")
      self.canvas1.create_arc(100, 100, 400, 400, start=180, extent=20 , fill="red", tags="Arc3")
      self.canvas1.create_arc(100, 100, 400, 400, start=270, extent=20 , fill="red", tags="Arc4")

      b1=Button(self.window,text="zhuan",command=self.zhuan)
      b1.pack()
      self.window.mainloop()


    def zhuan(self):
       i=0

       while True:
            self.canvas1.delete("Arc1","Arc2","Arc3","Arc4")
            self.canvas1.create_arc(100,100,400,400,start=i,extent=20,fill="red",tags="Arc1")
            self.canvas1.create_arc(100, 100, 400, 400, start=90 + i, extent=20 , fill="red", tags="Arc2")
            self.canvas1.create_arc(100, 100, 400, 400, start=180 + i, extent=20 , fill="red", tags="Arc3")
            self.canvas1.create_arc(100, 100, 400, 400, start=270 + i, extent=20, fill="red", tags="Arc4")
            self.window.update()
            i+=1

Fan()

stoic 发表于 2020-4-9 17:04:32

snaker 发表于 2020-4-9 16:49
tkinter刷新一下就行了

Exception in Tkinter callback
Traceback (most recent call last):
File "D:\python\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
File "D:/PyCharm Community Edition 2019.3.4/PycharmProjects/untitled/Tkinter/习题16(未解决).py", line 23, in zhuan
    self.canvas1.delete("Arc1","Arc2","Arc3","Arc4")
File "D:\python\lib\tkinter\__init__.py", line 2514, in delete
    self.tk.call((self._w, 'delete') + args)
_tkinter.TclError: invalid command name ".!canvas"
谢谢,现在已经可以执行了。执行完毕后,又出现了上面的问题是怎么回事呢?

snaker 发表于 2020-4-9 17:38:33

stoic 发表于 2020-4-9 17:04
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\python\lib\tkinter\_ ...

不影响,一直在循环里,没有退出循环就关闭tkinter就会出现这个问题
页: [1]
查看完整版本: 显示旋转的电扇