如何让 Tkinter 在没有滚动条的情况下显示非常大的图像?
How can I get Tkinter To display a very large image without having scrollbars?
我正在尝试让 Tkinter 显示 url 中的非常大的图像,但图像在 window 中没有完全显示。我希望无需滚动即可看到整个图像。我尝试过调整大小等,但这似乎没有太大效果。任何帮助,将不胜感激。
img link: https://web2.hirez.com/smite-media//wp-content/uploads/2017/07/Fafnir.jpg
我的代码:
from tkinter import *
import io
import urllib.request
from PIL import ImageTk, Image
canvas = Tk()
page = urllib.request.urlopen("https://web2.hirez.com/smite-media//wp-content/uploads/2017/07/Fafnir.jpg")
background = Image.open(io.BytesIO(page.read()))
tkimage = ImageTk.PhotoImage(background)
panel1 = Label(canvas, image=tkimage)
panel1.grid(ipadx=0, ipady=0, sticky=E)
mainloop()
Current result
背景 = background.resize((w, h), Image.ANTIALIAS)
使用size
属性和resize(w, h)
方法做你想做的事。这是一个示例,它将图像大小减半:
from tkinter import *
import io
import urllib.request
from PIL import ImageTk, Image
canvas = Tk()
page = urllib.request.urlopen("https://web2.hirez.com/smite-media//wp-content/uploads/2017/07/Fafnir.jpg")
background = Image.open(io.BytesIO(page.read()))
width, height = background.size
background = background.resize((width // 2, height // 2))
tkimage = ImageTk.PhotoImage(background)
panel1 = Label(canvas, image=tkimage)
panel1.grid(ipadx=0, ipady=0, sticky=E)
mainloop()
注意:不要使用width / 2
,而是使用width // 2
- 否则如果你得到一个浮点数作为除法结果会导致TypeError。
注意 1: 如果输出图像的质量对您来说比速度更重要,请使用 background.resize((width // 2, height // 2), Image.ANTIALIAS)
。
我正在尝试让 Tkinter 显示 url 中的非常大的图像,但图像在 window 中没有完全显示。我希望无需滚动即可看到整个图像。我尝试过调整大小等,但这似乎没有太大效果。任何帮助,将不胜感激。 img link: https://web2.hirez.com/smite-media//wp-content/uploads/2017/07/Fafnir.jpg
我的代码:
from tkinter import *
import io
import urllib.request
from PIL import ImageTk, Image
canvas = Tk()
page = urllib.request.urlopen("https://web2.hirez.com/smite-media//wp-content/uploads/2017/07/Fafnir.jpg")
background = Image.open(io.BytesIO(page.read()))
tkimage = ImageTk.PhotoImage(background)
panel1 = Label(canvas, image=tkimage)
panel1.grid(ipadx=0, ipady=0, sticky=E)
mainloop()
Current result
背景 = background.resize((w, h), Image.ANTIALIAS)
使用size
属性和resize(w, h)
方法做你想做的事。这是一个示例,它将图像大小减半:
from tkinter import *
import io
import urllib.request
from PIL import ImageTk, Image
canvas = Tk()
page = urllib.request.urlopen("https://web2.hirez.com/smite-media//wp-content/uploads/2017/07/Fafnir.jpg")
background = Image.open(io.BytesIO(page.read()))
width, height = background.size
background = background.resize((width // 2, height // 2))
tkimage = ImageTk.PhotoImage(background)
panel1 = Label(canvas, image=tkimage)
panel1.grid(ipadx=0, ipady=0, sticky=E)
mainloop()
注意:不要使用width / 2
,而是使用width // 2
- 否则如果你得到一个浮点数作为除法结果会导致TypeError。
注意 1: 如果输出图像的质量对您来说比速度更重要,请使用 background.resize((width // 2, height // 2), Image.ANTIALIAS)
。