鱼C论坛

 找回密码
 立即注册
查看: 541|回复: 5

[已解决]显示旋转的电扇

[复制链接]
发表于 2020-4-9 12:48:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#想显示宣传的电扇,先调用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()
最佳答案
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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-9 13:24:00 From FishC Mobile | 显示全部楼层
没玩过这东东
你可以先把其他代码注释掉或者暂时删除,单独试一下delete好不好用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

之前试过,好用~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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"
谢谢,现在已经可以执行了。执行完毕后,又出现了上面的问题是怎么回事呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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就会出现这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 05:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表