gpt4 book ai didi

python - 如何增加 Tkinter 最大 Canvas 尺寸以获得超大图像?

转载 作者:行者123 更新时间:2023-12-01 01:55:33 25 4
gpt4 key购买 nike

我无法显示长度(高度)超过 30612 像素高的图像。我读到 Canvas 有最大高度。我想获取源文件并将其扩展到 90 或 100k 像素的高度。相反,我看到建议可以缓冲 Canvas ,如果这是真的,我不知道如何实现它。.任何帮助表示赞赏!

我正在使用我在 Stack 中找到的代码,该代码应该处理大图像,它确实不错,但最终达到了 cava 高度限制。 Canvas Limit

from tkinter import *
from PIL import ImageTk
from PIL import *

Image.MAX_IMAGE_PIXELS = None


class ScrolledCanvas(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.master.title("Spectrogram Viewer")
self.pack(expand=YES, fill=BOTH)
canv = Canvas(self, relief=SUNKEN)
canv.config(width=400, height=500)
# canv.config(scrollregion=(0,0,1000, 1000))
# canv.configure(scrollregion=canv.bbox('all'))
canv.config(highlightthickness=0)

sbarV = Scrollbar(self, orient=VERTICAL)
sbarH = Scrollbar(self, orient=HORIZONTAL)

sbarV.config(command=canv.yview)
sbarH.config(command=canv.xview)

canv.config(yscrollcommand=sbarV.set)
canv.config(xscrollcommand=sbarH.set)

sbarV.pack(side=RIGHT, fill=Y)
sbarH.pack(side=BOTTOM, fill=X)

canv.pack(side=LEFT, expand=YES, fill=BOTH)
self.im = Image.open("Test_3.tif")
width, height = self.im.size
canv.config(scrollregion=(0, 0, width, height))
self.im2 = ImageTk.PhotoImage(self.im)
self.imgtag = canv.create_image(0, 0, anchor="nw", image=self.im2)
ScrolledCanvas().mainloop()

最佳答案

我尝试从 Canvas 网格的显示中拼凑出更大的图像。这看起来可能可行,至少如果你只想显示大图像的话。我刚刚用一个小图像进行了测试,没有关注内存或速度或任何东西......

from tkinter import *
from scrframe import VerticalScrolledFrame

root = Tk()
tiles = VerticalScrolledFrame(root) # Scrolled frame
tiles.grid()

tw = 90 # Tile width
th = 110 # Tile height
rows = 4 # Number of tiles/row
cols = 4 # Number of tiles/column

tile_list = [] # List of image tiles
img = PhotoImage(file='pilner.png')

for r in range(rows):
col_list = []
for c in range(cols):
tile = Canvas(tiles.interior, highlightthickness=0, bg='tan1',
width=tw, height=th)
tile.create_image(-c*tw, -r*th, image=img, anchor ='nw')
tile.grid(row=r, column=c)
col_list.append(tile)
tile_list.append(col_list)

root.mainloop()

现在,滚动框架似乎会引发一些问题,但似乎也有解决方案。我尝试使用 VerticalScrolledFrame,如 Python Tkinter scrollbar for frame 中所述。而且效果很好。由于它只提供垂直滚动条,因此您必须自己实现水平滚动条。也许一些附加功能(例如使用鼠标滚轮滚动、键盘快捷键或其他功能)会很有用。

我从 TKinter scrollable frame 获得了 VerticalScrolledFrame并针对 Python 3 进行了修改。

关于python - 如何增加 Tkinter 最大 Canvas 尺寸以获得超大图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50244202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com