为啥我的画布和/或我的照片图像不显示?

Posted

技术标签:

【中文标题】为啥我的画布和/或我的照片图像不显示?【英文标题】:Why is my canvas and/or my photoimage not displaying?为什么我的画布和/或我的照片图像不显示? 【发布时间】:2017-11-05 02:46:45 【问题描述】:

我不知道为什么我的画布没有显示。有一个对它的引用,self._screen,它是packed,但它根本不显示。我错过了什么?

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()的信息

以上是关于为啥我的画布和/或我的照片图像不显示?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的图像不会显示在 javascript 画布上?

为啥我的位图图像使用 EaselJS 在画布中出现别名?

为啥我使用 Javascript innerHTML 调用时我的图像不显示?

为啥图像不显示在我的 ASP.Net 核心网站上?

为啥我的 Tkinter 画布显示?

打开新Tkinter窗口时图像不显示在画布上