Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Июнь 22, 2007 19:58:59

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

Читаю доку по Tkinter, у кнопок есть свойство “image”. В доке об этом, как водится, два слова и молчок. Не могу догнать, как использовать это свойство. Можно, скажем, загнать на кнопку картинку из указанного ico-файла? (у меня ActivePython, WinXP) Если можно, прошу пример кода, пару строк.



Офлайн

#2 Июнь 23, 2007 00:34:44

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

правильная книга http://www.nmt.edu/tcc/help/lang/python/tkinter.pdf

как подсказывает здравый опыт отображать на кнопке можно объект PhotoImage или BitmapImage. Через PIL в такие объекты можно превращать jpg или png, но ico скорее всего не получится.



Офлайн

#3 Июнь 23, 2007 10:27:43

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

А можно хоть какой-то пример кода (хоть две строчки) с PhotoImage или BitmapImage? “Правильная” книга тоже не содержит примера…
Инструкция “import Image” приводит к ошибке.
P.S. Кстати, также не ясно назначение свойства кнопки “default”. Изменение этого свойства ни к чему не приводит…



Офлайн

#4 Июнь 23, 2007 11:49:26

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

Вот такой код приводит к отображению микроскопической кнопки без текста и рисунка:

# -*- coding: cp1251 -*-
from Tkinter import *
import sys

def die():
sys.exit()

root = Tk()
button = Button(root, text = u"Кнопка", command = die)
img = BitmapImage('C:\\Wall\\Abstract_4396.jpg')
button["image"] = img
button.pack()
root.mainloop()
Пробовал файлы .ico и .jpg, объекты BitmapImage и PhotoImage - результат один и тот же.



Офлайн

#5 Июнь 23, 2007 12:14:07

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

Всё, дошло. Tkinter умеет работать только с GIF (нужно использовать объект PhotoImage).
Что можно сделать в данном случае с объектом BitmapImage, я так и не понял (похоже, что ничего).



Офлайн

#6 Июнь 23, 2007 12:51:04

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

Все ники заняты
А можно хоть какой-то пример кода (хоть две строчки) с PhotoImage или BitmapImage? “Правильная” книга тоже не содержит примера…
Инструкция “import Image” приводит к ошибке.
P.S. Кстати, также не ясно назначение свойства кнопки “default”. Изменение этого свойства ни к чему не приводит…
Пример кода (не две строчки, конечно):


from Tkinter import *
import Image, ImageTk

root = Tk()

im = Image.open('lena.ppm')
ph_im = ImageTk.PhotoImage(im)

btn = Button(root, image=ph_im)
btn.pack()

root.mainloop()

Для того, чтобы работало установите себе PIL.

Картинка вместо lena.ppm может быть почти любая, берите, что есть под руками. Сама Лена – это из набора примеров к PIL :-)



Отредактировано (Июнь 23, 2007 12:55:50)

Офлайн

#7 Июнь 23, 2007 12:52:31

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

по поводу PIL и Tkinter рекомендую проштудировать учебник на сайте effbot.org



Офлайн

#8 Июнь 23, 2007 12:53:54

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

по поводу default - если установить это свойство в DISABLED, то кнопка будет с серым текстом и не реагировать на клик мышкой



Офлайн

#9 Июнь 23, 2007 12:58:30

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

bialix
по поводу default - если установить это свойство в DISABLED, то кнопка будет с серым текстом и не реагировать на клик мышкой
А вот и нет :(
# -*- coding: cp1251 -*-
from Tkinter import *
import sys

def die():
sys.exit()

root = Tk()
button = Button(root, text = u"Кнопка", command = die)
button["default"] = DISABLED
button.pack()
root.mainloop()
Кнопка прекрасно работает…
Кстати, в доке говорится о трёх значениях: NORMAL, ACTIVE и DISABLED. Что это означает, не ясно…



Отредактировано (Июнь 23, 2007 13:01:54)

Офлайн

#10 Июнь 23, 2007 13:00:41

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter, картинки на кнопках

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version