当通过画布显示时,输入图像的一部分被截断。tkinter窗口中的create_image
我尝试过更改canvas.create_image对象中的“side”参数和宽度/高度值。
下面是我代码和输入图像:
import tkinter as tk
from tkinter import *
from tkinter.filedialog import askopenfilename
import os
from PIL import ImageTk, Image
def show_values():
print(slider1.get())
window = tk.Tk()
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
print(filename)
slider1 = Scale(window, from_=0, to=42, orient='vertical')
slider1.pack(side=LEFT)
canvas = Canvas(window)
canvas.pack()
img = ImageTk.PhotoImage(Image.open(filename))
imageWidth = img.width()
imageHeight = img.height()
canvas.create_image(imageWidth + 1, imageHeight + 1, image=img)
canvas.pack(side=RIGHT)
Button(window, text='Process Image', command=show_values).pack(side=BOTTOM)
window.mainloop()
2条答案
按热度按时间mqkwyuun1#
问题的根源在于,默认情况下,图像被放置在画布上,图像的中心位于给定的坐标处,你根据图像的宽度和高度给出坐标,这就是中心的位置。
例如,问题中的图像为297x170。您使用这些坐标作为图像的坐标,这意味着图像的中心将位于297x170。画布大约为300x200。由于图像的中心位于x=297,因此它将延伸到画布的右边缘和下边缘之外。
现在还不清楚你想让图片显示在哪里,但是为了说明
anchor
是如何影响位置的,一个简单的解决方法是把图片放在0,0处,并把anchor
设置为“nw”(西北)。这将显示整个图片。如果你想让图片在画布中居中,解决方案只需要一点数学运算来计算画布中心的坐标。jdgnovmf2#
答案是不使用画布,而是使用框架和标签来显示图像。下面是一个工作示例: