Вопрос

В работе у меня есть приложение с графическим интерфейсом Python, которое я собираюсь использовать как на Windows, так и на Mac. Документация по Tkinter не самая лучшая, и Google-фу подвел меня.

Короче, я делаю:

c = Canvas(
    master=frame,
    width=settings.WINDOW_SIZE[0],
    height=settings.WINDOW_SIZE[1],
    background=settings.CANVAS_COLOUR
)
file = PhotoImage(file=os.path.join('path', 'to', 'gif'))
c.create_bitmap(position, image=file)
c.pack()
root.mainloop()

Если я закомментирую строку create_bitmap, приложение отрисовывается нормально. Если я прокомментирую его снова, я получу следующую ошибку:

_tkinter.TclError: неизвестная опция " -image "

Что странно. Tkinter в порядке, согласно тестам Python (т. Е. Импортирует _tkinter, Tkinter и выполняет Tk () ). С тех пор я установил PIL против моей установки Windows (XP SP3, Python 2.6), представляя, что он выполняет некоторые тяжелые работы на низком уровне. Кажется, это не так; Я все еще получаю вышеупомянутую ошибку.

Полная трассировка стека, исключая уже вставленный код:

File "C:\Python26\lib\lib-tk\Tkinter.py", line 2153, in create_bitmap
return self._create('bitmap', args, kw)
File "C:\Python26\lib\lib-tk\Tkinter.py", line 2147, in _create
*(args + self._options(cnf, kw))))

Кто-нибудь может пролить свет?

Это было полезно?

Решение

Tk имеет два типа графики, растровое изображение и изображение. Изображения бывают двух видов, растровые и фото. Растровые изображения и изображения растрового типа - это не одно и то же, что приводит к путанице в документах. PhotoImage создает изображение типа photo и нуждается в объекте изображения на холсте, поэтому, как вы уже пришли к выводу, решение заключается в использовании create_image.

Другие советы

Краткий ответ: Не используйте create_bitmap, если вы хотите использовать create_image.

Метод create_bitmap () не имеет аргумента image ; у него есть bitmap вместо этого.

Ошибка, которую вы получаете, связана с тем, что в Tkinter интерпретатор Tcl выполняется встроенным в процесс Python, и все взаимодействие с графическим интерфейсом происходит между Python и Tcl; Итак, ошибка, которую вы получаете, связана с тем, что Tcl отвечает "Я не знаю ни одного параметра -image в вызове .create_bitmap ".

В любом случае, как сказал Джефф, вам, вероятно, понадобится метод create_image .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top