LINUX.ORG.RU

tkinter не рисует картинки

 , ,


0

2

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

        pic = tkinter.PhotoImage(self.path)
        self.canvas.create_image(0, 0, image=pic)
Или так
        pic = PIL.ImageTk.PhotoImage(PIL.Image.open(self.path))
        self.canvas.create_image(0, 0, image=pic)

В обоих случаях никаких исключений не выбрасывается, но картинка не рисуется. Пробовал jpg и png. ЧЯДНТ?

★★★★★

tkinter не рисует картинки

Погрози ему пальцем

Siado ★★★★★ ()

Ну, вы же только очень малую часть кода выложили. Выложите весь код, что отвечает за создание окна и отрисовку изображения.

К примеру, у меня такой вот пример

#!/usr/bin/env python
"""
Will test using canvas and Pillow to open a jpg image, and handle mouse click events
"""
from tkinter import *
from PIL import ImageTk, Image

class PhotoCanvas(Frame):

    def __init__(self,master=None):
        
        """Sets up window and widgets"""
        Frame.__init__(self)
        self.master.title("Test")

        # opens the photo and convert them to Tkinter-compatible image objects
        self.image1 = Image.open("test.jpg")
        self.photo = ImageTk.PhotoImage(self.image1)
    
        # returns tuple of width and height of image
        (iWidth, iHeight) = self.image1.size 

        # create a canvas and place in frame
        self.canvas = Canvas(self, width = iWidth, height = iHeight)
        self.canvas.pack(side="top", fill="both", expand=True)
        # places image in upper left corner (NW) on the canvas at x=0, y=0
        self.canvas.create_image(0, 0, image=self.photo, anchor=NW)

root = Tk()
ui = PhotoCanvas(root)
ui.pack(side="top", fill="both", expand=True)
ui.mainloop()

отлично работает. Ну и пример из https://pythonprogramming.net/tkinter-adding-text-images/ вроде тоже рабочий.

lucentcode ★★★★★ ()
Последнее исправление: lucentcode (всего исправлений: 1)

Так что, получилось у вас найти место в коде, где вы допустили ошибку?

В моём примере выше важны, в частности, следующие строки, которые многие забывают добавить

self.canvas.pack(side="top", fill="both", expand=True)

и

ui.pack(side="top", fill="both", expand=True)

lucentcode ★★★★★ ()
Последнее исправление: lucentcode (всего исправлений: 1)
Ответ на: комментарий от lucentcode

Спасибо за пример. Он работает, а мой код нет. Место найти не удалось. И это точно не в паках, потому как я пробовал перед рисованием картинки добавлять create_rectangle. И прямоугольник рисуется, а картинка нет. Вечером повтыкаю в код еще.

Aswed ★★★★★ ()
Ответ на: комментарий от lucentcode

О боже. Оказывается проблема была в том, что если вызвать вот так

pic = PIL.ImageTk.PhotoImage(PIL.Image.open(self.path)) self.canvas.create_image(0, 0, image=pic)
То ссылка на картинку теряется, то питон ее не рисует. Нужно отдельно вот так сохранять
self.image1 = Image.open("test.jpg")
self.photo = ImageTk.PhotoImage(self.image1)

Aswed ★★★★★ ()
Ответ на: комментарий от Aswed

Я когда пример набрасывал вначале тоже на эти грабли наступил:) И автор примера, у которого я позаимствовал часть кода для примера, что-бы не набирать всё руками - тоже. Не знаю, поправил ли он это дело, может до сих пор страдает...

Рад, что у вас всё получилось!

lucentcode ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.