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

Python 为什么我的画布和/或照片图像不显示?,python,class,canvas,tkinter,widget,Python,Class,Canvas,Tkinter,Widget,我不知道为什么我的画布没有显示。有一个对它的引用,self.\u screen,它正在packed中,但它根本不显示。我错过了什么 class Map(Frame): def __init__(self, size): Frame.__init__(self) self.pack() #images self.spriteDimension = 20 self.img1 = PhotoImage(fil

我不知道为什么我的画布没有显示。有一个对它的引用,
self.\u 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);

据我所见,你有一些问题。 与其他编程语言不同,您不使用
在一行代码的末尾。您不需要在函数中放置
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()

据我所见,你有一些问题。 与其他编程语言不同,您不使用
在一行代码的末尾。您不需要在函数中放置
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()

删除
mainloop
:即使用
m.mainloop()
。您也不需要结尾分号,但它们不会造成任何伤害,我很抱歉,我忘记编辑该错误,而不是删除
mainloop
:即使用
m.mainloop()
。你也不需要结尾的分号,但它们不会造成任何伤害,我很抱歉我忘了编辑那个错误,太谢谢你了!帮了很多忙,但我有个问题。有一段时间,我的画布在没有根的情况下工作(我不记得确切的条件),那么,实例化根的目的是什么?好的,那么对于tkinter,您可以通过创建主顶层窗口来构建GUI,以使用所有内容,然后在GUI代码的底部必须调用
mainloop()
一次。这样做的原因是监视GUI中正在发生的所有事件,以便可以与之交互和更新。它有点像程序的一个大循环,因此得名。看看这个。有更多关于
mainloop()
的信息,非常感谢!帮了很多忙,但我有个问题。有一段时间,我的画布在没有根的情况下工作(我不记得确切的条件),那么,实例化根的目的是什么?好的,那么对于tkinter,您可以通过创建主顶层窗口来构建GUI,以使用所有内容,然后在GUI代码的底部必须调用
mainloop()
一次。这样做的原因是监视GUI中正在发生的所有事件,以便可以与之交互和更新。它有点像程序的一个大循环,因此得名。看看这个。关于
mainloop()