【发布时间】:2014-05-25 20:55:58
【问题描述】:
为了好玩,我正在使用 tkinter 创建一个蹩脚的直升机/flappybird 克隆,我遇到了一些非常奇怪的行为,图像显然没有显示。
(顺便说一句,使用 python3)
所以我从下面的代码开始只是想看看我是否可以开始画东西:
from tkinter import *
from PIL import ImageTk
class Bird(object):
def __init__(self, canvas, x=0, y=0):
self.canvas = canvas
photo = ImageTk.PhotoImage(file="flappy.gif")
self.bird = self.canvas.create_image(x,y,image=photo)
class Environment(Canvas):
def __init__(self, master, width=500, height=500):
super(Environment, self).__init__(master, width=width, height=height)
self.pack()
self.master = master
self.bird = Bird(self)
if __name__=="__main__":
r = Tk()
env = Environment(r)
env.pack()
r.mainloop()
图片没有出现,我只有一块空白画布。我觉得这很奇怪,所以我开始到处玩,看看为什么会这样。我的下一步是测试我是否知道如何创建图像,所以我只是将我的文件创建为基本图像创建:
if __name__=="__main__":
r,c=get_canv()
c.pack()
img = ImageTk.PhotoImage(file="flappy.gif")
c.create_image(100,100,image=img)
r.mainloop()
而且,可以预见的是,这很好用。所以,我在前面代码中的语法似乎是正确的。这是我偶然发现一些令人困惑的事情的时候:
if __name__=="__main__":
r,c=get_canv()
c.pack()
c.create_image(100,100,image=ImageTk.PhotoImage(file="flappy.gif"))
r.mainloop()
这没有画。我又留下了一张空白的画布。这就是让我怀疑幕后可能存在一些奇怪的线程问题的原因。有谁知道为什么第二个 sn-p 工作而第三个 sn-p 失败?
【问题讨论】:
标签: python tkinter race-condition