如何在 Python Tkinter 的画布中居中显示图片

8
我正在开发一个程序,它可以获取一张图片并将其放入画布中,就像一个照片查看器。但我想让这张图片位于画布小部件的中心,而它似乎会进入左上角。为什么会这样?我该如何将其置于画布小部件的中心?
代码:
from Tkinter import *
from PIL import ImageTk, Image
import os

class Application(Frame):
    def __init__(self, parent):
        Frame.__init__(self,parent)
        self.pack(fill=BOTH, expand=True)

        self.create_Menu()
        self.create_widgets()

    def create_Menu(self):
        self.menuBar = Menu(self)

        self.fileMenu = Menu(self.menuBar, tearoff=0)
        self.fileMenu.add_command(label="Open", command=self.getImage)
        self.fileMenu.add_separator()
        self.fileMenu.add_command(label="Exit", command=self.exitProgram)

        self.menuBar.add_cascade(label="File", menu=self.fileMenu)

        root.config(menu=self.menuBar)

    def create_widgets(self):
        self.viewWindow = Canvas(self, bg="white")
        self.viewWindow.pack(side=TOP, fill=BOTH, expand=True)

        def getImage(self):
        imageFile = Image.open("C:/Users/Public/Pictures/Sample Pictures/Desert.jpg")
        imageFile = ImageTk.PhotoImage(imageFile)

        self.viewWindow.image = imageFile
        self.viewWindow.create_image(0, 0, anchor=CENTER, image=imageFile, tags="bg_img")

    def exitProgram(self):
        os._exit(0)

root = Tk()
root.title("Photo Zone")
root.wm_state('zoomed')

app = Application(root)

root.mainloop()
1个回答

24
问题出在这行代码。
self.viewWindow.create_image(0, 0, anchor=CENTER, image=imageFile, tags="bg_img")

前两个参数,如此处所述:http://effbot.org/tkinterbook/canvas.htm,是图像的位置。原点位于画布的左上角。您的意思是

...(width/2, height/2, anchor=CENTER, ... )

通常情况下,您想要的几何中心点位于画布中心,即其宽度和高度的一半。

您似乎将“anchor”用作指定画布上位置的方式。实际上并不是这样。“anchor”在中心的位置意味着图像的中心将放置在指定的坐标处。来自链接源(effbot):

ANCHOR:相对于给定位置放置位图的位置。默认值为CENTER。

如果由于某些原因您不知道小部件的宽度和高度,请参见如何在tkinter中找到当前小部件大小?。tl;dr是使用:

canvas.winfo_width()

并且

canvas.winfo_height()

非常感谢,这对我帮助很大! - user4429937

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接