繁体   English   中英

如何在画布 Python Tkinter 中居中图像

[英]How to center a image in a canvas Python Tkinter

我正在做一个程序。 获取图像并将其放入画布中。 所以它就像一个照片查看器。 但我想在画布小部件的中心获取图像。 但它似乎进入左上角。 它为什么这样做? 我怎样才能把它放在画布小部件的中心?

代码:

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()

问题是线路

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” at center 表示图像的中心将放置在指定的坐标处。 从链接的来源(effbot):

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

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

canvas.winfo_width()

canvas.winfo_height()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM