代码之家  ›  专栏  ›  技术社区  ›  Jack Frye

TK图像未显示

  •  1
  • Jack Frye  · 技术社区  · 10 年前

    我试图在TKinter画布上放置一个图像,图像下方有其他按钮。由于某种原因,我无法让这张照片出现。我还没有实现这些按钮。这是迄今为止我的代码。

    class GUI_Control:
        def __init__(self, player):
            self.player = player
            self.map = Tk()
            self.MAP_WIDTH = 600
            self.MAP_HEIGHT = 375
            #define map gui here
            self.canvas = Canvas(self.map, width=self.MAP_WIDTH, height=self.MAP_HEIGHT)
            self.map_picture = PhotoImage(file=r"images/archipelago.gif")
            self.canvas.create_image(0, 0, image=self.map_picture)
            #define level gui's here
    
        def open(self):
            self.map.mainloop()
    
        def hide_map(self):
            self.map.destroy()
    
    
    #debugging
    if __name__ == "__main__":
        gui = GUI_Control(Player.Player())
        gui.open()
    
    2 回复  |  直到 10 年前
        1
  •  1
  •   KMR    10 年前

    您需要使用一种Tks几何体管理机制来告诉它在容器中的何处渲染画布。

    最简单的方法是添加 self.canvas.pack() 如此:

        #define map gui here
        self.canvas = Canvas(self.map, width=self.MAP_WIDTH, height=self.MAP_HEIGHT)
        self.canvas.pack()
        self.map_picture = PhotoImage(file=r"images/archipelago.gif")
        self.canvas.create_image(0, 0, image=self.map_picture)
        #define level gui's here
    
        2
  •  1
  •   martineau    10 年前

    你需要打电话给 pack() (或 grid() )要显示的窗口小部件的方法:

    class GUI_Control:
        def __init__(self, player):
            self.player = player
            self.map = Tk()
            self.MAP_WIDTH = 600
            self.MAP_HEIGHT = 375
            #define map gui here
            self.canvas = Canvas(self.map, width=self.MAP_WIDTH, height=self.MAP_HEIGHT)
            self.canvas.pack(expand=YES, fill=BOTH)  # ADDED
            self.map_picture = PhotoImage(file="images/archipelago.gif")
            self.canvas.create_image(0, 0, image=self.map_picture, anchor='nw')
            #define level gui's here
    
        def open(self):
            self.map.mainloop()
    
        def hide_map(self):
            self.map.destroy()
    
    #debugging
    if __name__ == "__main__":
        gui = GUI_Control(Player.Player())
        gui.open()