可滚动画布(Python)中的图像事件

时间:2014-12-09 10:17:55

标签: python image loops events scrollbar

希望通过循环将图像的缩略图加载到可滚动区域中。因此我创建了一个包含图像的画布。通过单击其中一个图像,较大的版本应出现在另一个帧中。所以我需要转移,例如事件函数的文件路径。

这是一个带有可工作的可滚动区域和一些矩形的示例,这些矩形代表我在该区域之外的图像。单击重新校正可以获得图像信息。但是只要我将所有矩形插入可滚动区域,矩形就不会在滚动过程中移动。

我需要改变什么?

import Tkinter as tk
from ttk import *

def OnClick(event, obj):
    print "you clicked on", obj
    for path, objectname in filedict.items():
        if objectname == obj:
            print path

root = tk.Tk()
canv = tk.Canvas(root, width=200, height=200, bg='green')
sbarV = Scrollbar(root, orient="vertical")
sbarV.config(command=canv.yview)
sbarV.pack(side="right", fill="y")      
canv.config(yscrollcommand=sbarV.set)
canv.pack(side="right", fill="y")
canv.pack_propagate(0)
canv.create_text(7,7,width=185, anchor="nw", font=("Arial", 7), text='example')

filedict = {}
for i in range(10):
    filedict[str(i) + '.jpg'] = tk.Canvas(root, width=50, height=30, bg='red')
    filedict[str(i) + '.jpg'].pack()
    filedict[str(i) + '.jpg'].create_rectangle(0,0,20,20, fill="black", tags=str(i))
    filedict[str(i) + '.jpg'].bind("<1>", lambda event, obj=filedict[str(i) + '.jpg']: OnClick(event, obj))

canv.config(scrollregion=(0,0,300,1000))
root.mainloop()

1 个答案:

答案 0 :(得分:0)

我找到了如何将画布插入滚动区域的解决方案。现在需要一个窗口,循环看起来像这样:

for i in range(10):
    filedict[str(i) + '.jpg'] = tk.Canvas(canv, width=50, height=30, bg='red')
    filedict[str(i) + '.jpg'].pack()
    filedict[str(i) + '.jpg'].create_rectangle(0,0,20,20, fill="black", tags=str(i))
    filedict[str(i) + '.jpg'].bind("<1>", lambda event, obj=filedict[str(i) + '.jpg']: OnClick(event, obj))
    canv.create_window(80,20+i*40, window=filedict[str(i) + '.jpg'])