- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想显示很多缩略图,并能够根据缩略图的内容对它们执行不同的操作。为此,我采用了 Adding a scrollbar to a group of widgets in Tkinter 中的示例。并将标签放在嵌入网格的第一列中,将图像放在第二列中。作为示例缩略图,您可以下载此 image并将其重命名为160x120.jpg
。
import Tkinter as tk
from PIL import Image, ImageTk
class Example(tk.Frame):
def __init__(self, root):
tk.Frame.__init__(self, root)
self.canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")
self.frame = tk.Frame(self.canvas, background="#ffffff")
self.vsb = tk.Scrollbar(root, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side="right", fill="y")
self.canvas.pack(side="left", fill="both", expand=True)
self.canvas.create_window((4,4), window=self.frame, anchor="nw",
tags="self.frame")
self.frame.bind("<Configure>", self.OnFrameConfigure)
self.photos = []
self.imgs = []
self.images = []
self.lbls = []
self.populate()
def populate(self):
'''Put in some fake data'''
# n_thumbs = 100 : As expected, one label and one image per row.
# n_thumbs = 300 : Images are only displayed up to the 278th.
# n_thumbs = 600 : Just 63 images are displayed. Two labels per row.
n_thumbs = 100
for i in range(n_thumbs):
lbl = tk.Label(self.frame, text="img " + str(i), width=10)
lbl.grid(row=i, column=0)
photo = Image.open("160x120.jpg")
img = ImageTk.PhotoImage(photo)
image = tk.Label(self.frame, image=img)
image.grid(row=i, column=1)
self.lbls.append(lbl)
self.photos.append(photo)
self.images.append(image)
self.imgs.append(img)
def OnFrameConfigure(self, event):
'''Reset the scroll region to encompass the inner frame'''
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
if __name__ == "__main__":
root=tk.Tk()
Example(root).pack(side="top", fill="both", expand=True)
root.mainloop()
现在,如果您设置 n_thumbs = 100
,一切都会按预期工作,即每行有一个标签和一张图像。
如果您设置n_thumbs = 300
,列表会突然以第 278 个图像结束。
如果您设置n_thumbs = 600
,则仅显示 63 张图像,但您仍然可以向下滚动到最后一张图像之外。此外,突然每行都有两个标签。
如何解释这些影响?如何使用 Tkinter 在网格中显示 300 多个图像?
最佳答案
我不知道事实,但我的猜测是你超出了 tk Canvas 的限制。对于 120 像素高的图像,在包含帧的高度超过 32k (32767) 像素之前,您可以垂直显示 272 个图像。也许有一个硬性限制,即 Canvas 不能大于 32767x32767。或者坐标可能被限制在 -32767 到 +32767 之间。如果您的某些缩略图的高度不完全是 120 像素,这可能可以解释您所看到的 278 像素的限制。我在我的 OSX 系统上看到的限制略有不同。
再说一次,我不知道事实是否如此,但似乎有可能。
如果这是一个硬性限制,只需做一些工作,您一次只能显示一屏,并且仅当新图像滚动到 View 中时才加载新图像(并且您可以销毁已滚动到 View 之外的图像)。并且,不使用嵌入框架,而是直接在 Canvas 上绘制图像。
关于python - 嵌入超过 280 个元素的 Canvas 中的 Tkinter 网格的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19971745/
我可以使用两种方法添加一个 child ,一种是 Canvas.AddVisualChild(Visual); Canvas.AddLogicalChild(Visual); 我在视觉对象的 Draw
在过去的几周里,我一直在尝试各种方法,试图找到将 BDD 用于依赖于 HTML5 Canvas 元素以及用户与之交互的 Web 应用程序的最佳方法。 我一直在使用 Jasmine 和 Cucumber
我正在尝试完成撤消/重做。我正在使用loadFromJSON(...)从我存储在数组中的 Canvas 状态重新构建 Canvas 。基本上,我的想法是破坏现有的 Canvas 并重新构建 Canva
我正在尝试在 Canvas 上设置简单的放大/缩小功能。我正在使用 KineticJS 处理触摸事件并在 Canvas 中绘图,但无法实现缩放。 KinteicJS 有一个类似的例子,但它们总是在中心
我正在使用 processing.js 在 javascript 中开发一个画笔应用程序 它正在使用 Canvas 对象。我想在 Canvas 的背景中保留一个图像。在前景中画一些东西。在保存时,我只
您好,我想为 discord.js Bot 安装 Canvas 。 当我尝试使用以下命令安装 Canvas 时npm install canvas我收到以下错误: pi@server:~/Bots/D
我正在尝试使用 Canvas 和动力学的组合来构建填充图案,但在尝试获得连续线时遇到了问题。 此 jsfiddle显示了到目前为止我所拥有的,但是因为我的重复模式是正方形,角会影响线条,我尝试使用 l
我正在开发一个 webassembly 程序。 我可以使用 emscripten_set_canvas_size 设置 Canvas 大小(我一直读到我需要切换到新的 API,因为这个 API 会贬值
您好,我已经为第一个 Canvas 中的第一个图像创建了一个圆形表单,但我没有成功使用第一个 Canvas 的 dataURL 并将其添加到第二个 Canvas 中。 这是我的 fiddle :htt
问题在于不同浏览器之间的不一致。 使用Dart Chrome,JS Chrome,JS Opera运行 双击可以进入和退出全屏 m_oCanvas.width =(window.screen.widt
我正在使用Flutter框架和Dart开发图像编辑器,因此无法将矩阵滤镜应用于 Canvas 。 我正在尝试使用“Paint”类和“canvas.drawPaint(paint)”函数将矩阵过滤器应用
如果在已经具有非整数比例因子的 Canvas 上绘制图像,我会遇到 Canvas 上下文drawImage()方法的问题。似乎这样的图像以一种奇怪的方式被剪切(有时图像的最右边的部分被剪切,有时是最底
Canvas 的“宽度”属性值有限制吗? 在下面的示例中,我在 ScrolledWindow 中创建一个 Canvas。 # Packages package require BWidget # Ma
我正在尝试制作类似于 this article 底部的效果的文本效果 我建议的方法是: 制作两个 Canvas ,一个是可见的,另一个是不可见的我用它作为缓冲区。 在缓冲区 Canvas 上绘制一些文
例如var new = canvas.toDataURL("image/png"); 我希望这个新变量中存在的 base64 显示到存在的第二个 Canvas 元素中。但是它不使用 drawimage
有人有使用这两个 Node.js 库中的一个或两个的经验吗?很想知道每个人的成功或困难。 最佳答案 LearnBoost是社区中最多产的 Node 模块开发人员之一,因此我选择使用 node-canv
如何知道 Canvas 运行的是“WebGL”还是普通 Canvas ? 通过检查源代码,我发现这两种情况都是 Canvas 。 最佳答案 这真的取决于你想如何去发现。 例如你可以这样调用 `getC
在 Canvas 上绘图非常好。甚至橡皮擦也能正常工作。问题是,当 Canvas 保存为图像时,它绘制的是黑线而不是橡皮擦。 为了更好地理解,我添加了屏幕截图和代码。 1。在删除绘图时 - 一个。源代
我正在尝试为 Canvas 附加鼠标悬停和鼠标移出事件: 默认 Canvas 是函数drawcircle的 Canvas 。 如果用户越过 Canvas ,应将其更改为drawEllipse的 Can
我正在使用 Three.js 构建一个简单的 2D 游戏。我只使用世界的 X 和 Y 位置来移动对象,将它们的 z 位置保留为零。我使用禁用旋转的 TrackballControls,以允许使用右键单
我是一名优秀的程序员,十分优秀!