新图像位于错误的位置

时间:2017-09-08 08:39:51

标签: python tkinter tkinter-canvas

我是Python的新手并尝试了一下。到目前为止,我设法在背景图片前加载一个按钮,但如果我想通过单击按钮更改背景,则新图片位于错误的位置,无论设置锚点如何。

import tkinter as tk



class App(tk.Tk):



    def __init__(self, *args, **kwargs):
        tk.Toplevel.__init__(self, *args, **kwargs)

        self.master.withdraw() # hide second empty window
        self.protocol("WM_DELETE_WINDOW", self.master.destroy) # close program if close button is pressed


        img1 = tk.PhotoImage(file="C:/Desktop/win10start.png")
        img2 = tk.PhotoImage(file="C:/Desktop/winButton.png")
        self.c1 = tk.Canvas(master = self, borderwidth = 0, relief = tk.FLAT, highlightthickness = 0)
        self.c1.configure(width = 1024, height = 768)
        self.c1.grid_propagate(False)

        self.c1.create_image((0,0), image = img1, anchor = 'nw')

        b1 = tk.Button(self.c1, image = img2, borderwidth = 0, relief = tk.FLAT, highlightthickness = 0, command = lambda: changeImage(self.c1))
        self.c1.grid(row = 0, column = 0, sticky = tk.NSEW)
        b1.place(x = 344, y = 198 )


        self.mainloop()

    def changeImage(canvas):
        newImage = tk.PhotoImage(file="C:/Desktop/Koala.png")
        canvas.delete("all")
        canvas.configure(width = 1024, height = 768)
        canvas.create_image((0,0), anchor = 'se', image = newImage)
        canvas.image = newImage
        return


App()

有没有其他方法来设置我应该使用的图片的位置?

编辑:

代码似乎完全随机,就像现在经过一段时间的游戏然后恢复原始代码一样,考拉完全消失了......我很困惑。

newImage

1 个答案:

答案 0 :(得分:1)

您的代码有2个问题。

1您需要将self添加为changeImage()方法的参数。

所以改变:

def changeImage(canvas):

要:

def changeImage(self, canvas):

2你应该删除锚点并将图像位置更改为高于0,0。这将让您了解正在发生的事情。

变化:

canvas.create_image((0,0), anchor = 'se', image = newImage)

要:

canvas.create_image((36,36), image = newImage)

您的图片正在被放置,它只是被放置在视野之外。您可以使用位置和锚点来查看最新情况。