Как я могу перебрать список изображений, правильно добавить их в виджет метки и связать события щелчка, используя tkinter / python2.7? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть статический рабочий пример, который отображает изображения по вертикали и печатает имя приложения, как указано (img1-3) при нажатии.Когда я зацикливаюсь на списке изображений, я могу отобразить изображения по вертикали, но щелчок ЛЮБОГО изображения выводит «pyimag3» вместо «pyimage1-3»?

Статический пример (ОК):

import Tkinter as tk
import ttk
import os

root = tk.Tk()
root.resizable(width=False, height=False)
root.geometry("500x500")
root.config(bg="green")

iconPath = os.path.dirname(os.path.abspath(__file__))

#create container
body_frame = tk.Frame(root)
body_frame.pack()

def appName(imgx):
    print imgx


imgs = tk.PhotoImage(file =  iconPath + '\\icons\\img1.gif')
imgs2 = tk.PhotoImage(file =  iconPath + '\\icons\\img2.gif')
imgs3 = tk.PhotoImage(file =  iconPath + '\\icons\\img3.gif')

appIcon = tk.Label(body_frame, image=imgs)
appIcon.bind("<Button-1>", lambda x: appName('img1'))
appIcon.grid(row=1, column=1)

appIcon = tk.Label(body_frame, image=imgs2)
appIcon.bind("<Button-1>", lambda x: appName('img2'))
appIcon.grid(row=2, column=1)

appIcon = tk.Label(body_frame, image=imgs3)
appIcon.bind("<Button-1>", lambda x: appName('img3'))
appIcon.grid(row=3, column=1)

root.mainloop()

для цикла (проблема):

import Tkinter as tk
import ttk
import os

root = tk.Tk()
root.resizable(width=False, height=False)
root.geometry("500x500")
root.config(bg="green")

iconPath = os.path.dirname(os.path.abspath(__file__))

#create container
body_frame = tk.Frame(root)
body_frame.pack()

def appName(imgx):
    print imgx
imgList = ['img1.gif', 'img2.gif', 'img3.gif']
rowCount = 0
for item in imgList:
    imgs = tk.PhotoImage(file =  iconPath + '\\icons\\'+imgList[rowCount]) 
    photo = tk.Label(body_frame, image=imgs)
    photo.image = imgs
    photo.bind("<Button-1>", lambda x: appName(imgs))
    photo.grid(row=rowCount, column=1)
    rowCount = rowCount+1
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...