为啥我的画布和/或我的照片图像不显示?
Posted
技术标签:
【中文标题】为啥我的画布和/或我的照片图像不显示?【英文标题】:Why is my canvas and/or my photoimage not displaying?为什么我的画布和/或我的照片图像不显示? 【发布时间】:2017-11-05 02:46:45 【问题描述】:我不知道为什么我的画布没有显示。有一个对它的引用,self._screen
,它是pack
ed,但它根本不显示。我错过了什么?
class Map(Frame):
def __init__(self, size):
Frame.__init__(self)
self.pack()
#images
self.spriteDimension = 20
self.img1 = PhotoImage(file="Terrain1.gif")
self.img2 = PhotoImage(file="Terrain2.gif")
#grid
self._mapSize = size
# self._grid = self.randomize()
#canvas
canvas_dimension = self._mapSize * self.spriteDimension
self._screen = Canvas(self, width=canvas_dimension, height=canvas_dimension)
self._screen.pack()
self.test()
def test(self):
print("in here")
self._screen.create_image((50,50), anchor = NW, image = self.img1)
print("out here")
def main():
m =Map(20);
m.mainloop(20);
【问题讨论】:
删除mainloop
的参数:即使用m.mainloop()
。你也不需要结束分号,但它们不会伤害任何东西,
抱歉,我忘了把那个错误改掉
【参考方案1】:
据我所知,您有一些问题。
与其他编程语言不同,您不会在代码行末尾使用;
。您不需要将m = Map(20)
或root.mainloop()
放在函数中。您还需要定义一个 tkinter 窗口,因此将 root = Tk()
添加到程序的开头。看看下面的代码,如果有不明白的地方请告诉我。
from tkinter import *
root = Tk()
class Map(Frame):
def __init__(self, size):
Frame.__init__(self)
self.pack()
self.spriteDimension = 20
self.img1 = PhotoImage(file="Terrain1.gif")
self.img2 = PhotoImage(file="Terrain2.gif")
self._mapSize = size
canvas_dimension = self._mapSize * self.spriteDimension
self._screen = Canvas(self, width=canvas_dimension, height=canvas_dimension)
self._screen.pack()
self.test()
def test(self):
print("in here")
self._screen.create_image((50,50), anchor = NW, image = self.img1)
print("out here")
m = Map(20)
root.mainloop()
【讨论】:
非常感谢!帮助很大,但我确实有一个问题。在某个时间点,我的画布在没有根的情况下工作(我不记得确切的条件)那么,实例化根的目的是什么? 好的,所以对于 tkinter,您开始构建您的 GUI,方法是创建主顶层窗口以使用 Tk() 将所有内容放入其中,然后在您的 GUI 代码底部您必须调用一次mainloop()
。这样做的原因是监视 GUI 中发生的所有事件,以便可以与之交互和更新事物。它有点像程序的一个大循环,因此得名。看看这个link。还有更多关于mainloop()
的信息以上是关于为啥我的画布和/或我的照片图像不显示?的主要内容,如果未能解决你的问题,请参考以下文章