Найти - Пользователи
Полная версия: Tkinter, картинки на кнопках
Начало » GUI » Tkinter, картинки на кнопках
1 2 3
Все ники заняты
Читаю доку по Tkinter, у кнопок есть свойство “image”. В доке об этом, как водится, два слова и молчок. Не могу догнать, как использовать это свойство. Можно, скажем, загнать на кнопку картинку из указанного ico-файла? (у меня ActivePython, WinXP) Если можно, прошу пример кода, пару строк.
bialix
правильная книга http://www.nmt.edu/tcc/help/lang/python/tkinter.pdf

как подсказывает здравый опыт отображать на кнопке можно объект PhotoImage или BitmapImage. Через PIL в такие объекты можно превращать jpg или png, но ico скорее всего не получится.
Все ники заняты
А можно хоть какой-то пример кода (хоть две строчки) с PhotoImage или BitmapImage? “Правильная” книга тоже не содержит примера…
Инструкция “import Image” приводит к ошибке.
P.S. Кстати, также не ясно назначение свойства кнопки “default”. Изменение этого свойства ни к чему не приводит…
Все ники заняты
Вот такой код приводит к отображению микроскопической кнопки без текста и рисунка:
# -*- 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 - результат один и тот же.
Все ники заняты
Всё, дошло. Tkinter умеет работать только с GIF (нужно использовать объект PhotoImage).
Что можно сделать в данном случае с объектом BitmapImage, я так и не понял (похоже, что ничего).
bialix
Все ники заняты
А можно хоть какой-то пример кода (хоть две строчки) с 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 :-)
bialix
по поводу PIL и Tkinter рекомендую проштудировать учебник на сайте effbot.org
bialix
по поводу default - если установить это свойство в DISABLED, то кнопка будет с серым текстом и не реагировать на клик мышкой
Все ники заняты
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. Что это означает, не ясно…
bialix
Ссылки по теме:

PIL: http://effbot.org/zone/pil-index.htm
Книжка по Tkinter: http://www.pythonware.com/library/tkinter/introduction/
И вот еще: http://effbot.org/tkinterbook/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB