gpt4 book ai didi

python - tkinter 最大 Canvas 尺寸?

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

似乎我正在达到某种预设的最大可滚动 Canvas 尺寸,但我不知道......

我在 Tkinter 中编写了一个简单的 iTunes 替代品。

由于我喜欢专辑封面 View ,因此专辑至少需要 200x200 像素大小,而且我有很多专辑(~1600),因此我需要大量空间。

但是我发现在高度~35000px以上窗口无法显示它们。

这里我编写了一个示例代码 - 它需要 ImageMagick 的转换,并且在我的机器上运行大约 15 秒。您可以看到窗口只显示了 170 个正方形中的 163 个...

from Tkinter import *

import subprocess

def main():

root = Tk()
root.geometry("%dx%d+0+0" % (1800,1000))
cv = Canvas(root)
vscrollbar = Scrollbar(root, orient=VERTICAL)
vscrollbar.pack(fill=Y, side=RIGHT)
vscrollbar.config(command=cv.yview)
cv.config(yscrollcommand=vscrollbar.set)
cv.configure(scrollregion=(0,0, 4000, 50000))
cv.pack(side=LEFT, fill=BOTH, expand=TRUE)
fcv=Frame(root)
cv.create_window(0, 0, anchor = "nw", window=fcv)


memimages=[]
for row_index in range(170):
a=subprocess.Popen("convert -size 200x200 -pointsize 22 -gravity center label:%d test.gif" % row_index, shell=True,
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output, errors = a.communicate()
iconimage = PhotoImage(file="test.gif")
b=Button(fcv,image=iconimage)
memimages.append(iconimage)
b.grid(row=row_index, column=0, sticky=N+S+E+W)

mainloop()

main()

最佳答案

我修改了您的代码以在特定像素高度位置显示图像,例如1 个在 y=0 处,1 个在 y=32000 处,1 个在 y=50000 处。 Canvas 能够从 0 一直遍历到 50,000 像素高度,我们可以看到预期的图像。

这意味着 Canvas 能够一直滚动到 y=50000 像素,问题不在于 Canvas 的像素高度限制,但我猜测可能与按钮放置在 Canvas 框架中的方式有​​关窗口或框架在 Canvas 窗口中的放置或 Canvas 窗口本身在 Canvas 中的放置。

你可以运行这个修改后的代码来看看我的意思。一直滚动到底部。希望这能让您更深入地解决代码问题。

from Tkinter import *

def main():

root = Tk()
root.geometry("%dx%d+0+0" % (1800,1000))
cv = Canvas(root)
vscrollbar = Scrollbar(root, orient=VERTICAL)
vscrollbar.pack(fill=Y, side=RIGHT)
vscrollbar.config(command=cv.yview)
cv.configure(yscrollcommand=vscrollbar.set)
cv.configure(scrollregion=(0,0, 4000, 50000))
cv.pack(side=LEFT, fill=BOTH, expand=TRUE)
iconimage = PhotoImage(file="monkey.gif")
testimage = cv.create_image(300, 0, image=iconimage)
testimage1 = cv.create_image(300, 32000, image=iconimage)
testimage2 = cv.create_image(300, 50000, image=iconimage)
mainloop()

main()

更新:经过进一步测试,Canvas.create_window()方法形成的窗口的显示高度似乎确实存在限制。我在 mainloop() 之前添加了下面的代码,它尝试创建具有 100x100 像素图像的按钮和标签。最大。不。可以显示的按钮行数为 316+,而最大。不。可以显示的标签行数超过 322 行。如果按钮和标签一起创建,则最大。不。可以显示的行数为316+。我的结论似乎与你的相同。

很抱歉没能回答您的问题。但是,我希望我的答案能够支持您,并推荐更有知识的人来解释为什么会出现这种行为。

fcv=Frame(cv)
cv.create_window(0, 0, anchor = "nw", window=fcv)
iconimage = PhotoImage(file="monkey100.gif") # Image dimension is 100x100 pixels
for row_index in range(340):
b=Button(fcv,image=iconimage)
b.grid(row=row_index, column=0, sticky=N+S+E+W)
lb=Label(fcv,text=str(row_index), image=iconimage, compound=LEFT)
lb.grid(row=row_index, column=1, sticky=N+S+E+W)

关于python - tkinter 最大 Canvas 尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42830037/

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