Привязка содержимого списка для отображения изображения при нажатии - PullRequest
0 голосов
/ 05 декабря 2011

Я хочу отобразить изображение при нажатии элемента в списке, но когда я щелкаю элемент, отображается только одно изображение для всех элементов, но изображение определенного элемента не загружается.

from Tkinter import *
import os
from PIL import Image

root = Tk()
scrollbar = Scrollbar(root)
scrollbar.pack( side = RIGHT, fill=Y )
mylist = Listbox(root, font = "verdana 15", yscrollcommand = scrollbar.set,  height= 5, width = 10 )

def biscuit(self):
    bi = Image.open('D://images/biscuit.jpeg')
    bi.show()

a = mylist.insert(END,str('Biscuit'))
mylist.bind('<Button>', biscuit)

def chocolate(self):
    ch = Image.open('D://images/chocolate.jpeg')
    ch.show()

b = mylist.insert(END,str('Chocolate'))
mylist.bind('<Button>', chocolate)

def sandwich(self):
    san = Image.open('D://images/sandwich.jpeg')
    san.show()

c = mylist.insert(END,str('Sandwich'))
mylist.bind('<Button>', sandwich)

def cake(self):
    ca = Image.open('D://images/cake.jpeg')
    ca.show()

d = mylist.insert(END,str('Cake'))
mylist.bind('<Button>', cake)

mylist.pack( )
scrollbar.config( command = mylist.yview )
mainloop()

1 Ответ

0 голосов
/ 05 декабря 2011

Вы связываете событие кнопки с ListBox, а не с элементом в ListBox, поэтому при нажатии вы получаете последний связанный.Вам нужно проверить, какой элемент выбран в вашем обработчике и открыть правильное изображение.

Что-то вроде:

from Tkinter import *
import os
from PIL import Image

root = Tk()
scrollbar = Scrollbar(root)
scrollbar.pack( side = RIGHT, fill=Y )
mylist = Listbox(root, font = "verdana 15", yscrollcommand = scrollbar.set,  height= 5, width = 10 )

pathToImages = ['D://images/biscuit.jpeg',
'D://images/chocolate.jpeg','D://images/sandwich.jpeg',
'D://images/cake.jpeg']

def buttonHandler(self):
    bi = Image.open(pathToImages[int(mylist.curselection()[0])])
    bi.show()

a = mylist.insert(END,str('Biscuit'))
b = mylist.insert(END,str('Chocolate'))
c = mylist.insert(END,str('Sandwich'))
d = mylist.insert(END,str('Cake'))

mylist.bind('<<ListboxSelect>>', buttonHandler)

mylist.pack( )
scrollbar.config( command = mylist.yview )
mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...