Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14

Toplevel + PhotoImage

28.01.2016, 22:17. Показов 2744. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Проблема в следующем, картинка не отображается в окне Toplevel(), в Tk() всё нормально. Интересует именно tkinter, PIL и тому подобное не надо, про from tkinter import * знаю, использовал для краткости, Label использовал - всё тоже самое, в гугле искал, но не нашел, на английском нечто похожее есть, но английский знаю слишком плохо, чтобы разобрать.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from tkinter import *
 
def Press(root):
    slave = Toplevel(root)
    slave.geometry('550x280')
    slave.resizable(0, 0)
    slave.title('test2')
 
    frm2 = Frame(slave).grid()
 
    can2 = Canvas(frm2, width = 500, height = 280)
    can2.grid(row = 0, column = 0)
 
    img2 = PhotoImage(file = 'random.gif')
    can2.create_image(0, 0, image = img2, anchor=NW)
 
root = Tk()
root.geometry('550x280')
root.resizable(0, 0)
root.title('test1')
 
frm1 = Frame(root).grid()
 
can1 = Canvas(frm1, width = 500, height = 280)
can1.grid(row = 0, column = 0)
img1 = PhotoImage(file = 'random.gif')
 
btn1 = Button(frm1, width = 5, text = 'Press', command = (lambda: Press(root)))
btn1.grid(row = 0, column = 1)
 
img1 = PhotoImage(file = 'random.gif')
can1.create_image(0, 0, image = img1, anchor=NW)
 
mainloop()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2016, 22:17
Ответы с готовыми решениями:

Ошибка нет атрибут PhotoImage
Здравствуйте.Можете помочь я скачал с интернета код для игры “сапёр” но она выдает ошибку.

tkinter PhotoImage
Всем привет! Почему мой код не работает? Он должен рисовать изображение указанного размера.import tkinter master = tkinter.Tk() ...

Tkinter & PhotoImage
Добрый день. Есть код: from tkinter import * root = Tk() for i in range(0, 8, 1): temp = PhotoImage(file =...

12
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.01.2016, 15:03
Лучший ответ Сообщение было отмечено Vivevnev как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import tkinter
 
from PIL import Image, ImageTk
 
 
class ImageGIF(tkinter.Label):
    def __init__(self, master, path):
        super(ImageGIF, self).__init__(master)
 
        self.path = path
        self.displayed_image = Image.open(self.path)
        self.delay = self.displayed_image.info.get('duration', 100)
        self.current_image = 0
        self.frames = []
 
        self.start_animation()
 
    def extract_images(self):
        """
        Извлекаем из gif изображения из которых он состоит
        """
        images = []
 
        try:
            while True:
                images.append(self.displayed_image.copy())
                self.displayed_image.seek(len(images))
        except EOFError:
            # Извлекли все
            pass
 
        return images
 
    def start_animation(self):
        for i in self.extract_images():
            self.frames.append(ImageTk.PhotoImage(i.convert('RGBA')))
 
        # Нужно, чтобы окно было такого же размера как картинка
        self.config(image=self.frames[0])
 
        self.after(self.delay, self.next_image)
 
    def next_image(self):
        """
        Отображает следующий кадр
        """
        self.config(image=self.frames[self.current_image])
        self.current_image += 1
        if self.current_image == len(self.frames):
            self.current_image = 0
        self.after(self.delay, self.next_image)
 
 
root = tkinter.Tk()
gif = ImageGIF(root, '1.gif')
gif.pack()
root.mainloop()
Цитата Сообщение от Vivevnev Посмотреть сообщение
Проблема в следующем, картинка не отображается в окне Toplevel(),
Ну это естественно, потому что когда функция заканчивает свое выполнение, то все объекты в ее области видимости удаляются (в том числе и твоя картинка).

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import tkinter
 
 
class MainWindow(tkinter.Tk):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.title('Main Window')
        self.geometry('550x280')
        self.resizable(0, 0)
 
        self.main_image = None
        self.img_display = None
        self.open_new_window = None
 
        self.second_window = None
        self.second_image = None
        self.second_img_display = None
 
        self.build_widgets()
 
    def build_widgets(self):
        self.main_image = tkinter.PhotoImage(file='1.gif')
 
        self.img_display = tkinter.Label(self, image=self.main_image)
        self.img_display.grid(row=0, column=0)
 
        self.open_new_window = tkinter.Button(self,
                                              text='Открыть в отдельном окне')
        self.open_new_window.bind('<ButtonRelease-1>',
                                  lambda event: self.show_second_window(event, root))
        self.open_new_window.grid(row=1, column=0)
 
    def show_second_window(self, event, root):
        self.second_window = tkinter.Toplevel(self)
        self.second_window.title('Second Window')
        self.second_window.geometry('550x280')
        self.second_window.resizable(0, 0)
 
        self.second_image = tkinter.PhotoImage(file='1.gif')
        self.second_img_display = tkinter.Label(self.second_window,
                                                image=self.second_image)
        self.second_img_display.grid(row=0, column=0)
 
 
root = MainWindow()
root.mainloop()
Цитата Сообщение от Vivevnev Посмотреть сообщение
в гугле искал, но не нашел, на английском нечто похожее есть, но английский знаю слишком плохо, чтобы разобрать.
Тогда иди сначала учить английский, потому что на русском информации в принципе нет и искать можно только на английском.
1
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14
29.01.2016, 15:58  [ТС]
Ну это естественно, потому что когда функция заканчивает свое выполнение, то все объекты в ее области видимости удаляются (в том числе и твоя картинка).
alex925, Действительно. Всё дело было в этом. Я читал об этом, но так как упоминалось это всколзь и не было примера, то упустил это из вида. Спасибо большое.

Тогда иди сначала учить английский, потому что на русском информации в принципе нет и искать можно только на английском.
Ну почему же? Говорят (сам не видел, врать не буду), что есть специализированные форумы, где доброжелательные ребята всегда помогают новичкам. В любом случае, ещё раз спасибо )) Вы меня очень выручили.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.01.2016, 16:35
Цитата Сообщение от Vivevnev Посмотреть сообщение
Ну почему же?
Потому, что помогают до поры до времени и то не всегда могут ответь + когда ты решаешь нетривиальную задачу, то за тебя точно ни кто не будет разбираться как ее решить и единственный, кто тебе сможет помочь это только ты.

Ну и к тому же невозможно спрашивать все все подрядят. На пример вся документация к библиотекам на английском и в общем пока ты не будешь знать английский хотя бы на базовом уровне, то ты будешь как беспомощный ребенок.
0
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14
29.01.2016, 17:13  [ТС]
Тише, тише. Я же указал, что это только говорят. Брешут, наверное...
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.01.2016, 17:42
Цитата Сообщение от Vivevnev Посмотреть сообщение
Я же указал, что это только говорят. Брешут, наверное...
Да я не отрицаю того, что на некоторые вопросы отвечают. Просто я тебе обрисовал картину полностью.
0
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14
29.01.2016, 19:08  [ТС]
А что насчет http://stackoverflow.com? Я хоть английский и плохо знаю, но там я ниразу не видел ответов в стиле "загугли, идиот, нафиг ты сюда приперся?". Есть ответ - ответят, нет - молчат и никто никого не поучает. Мало того, что там английский все знают, мало того, что вся документация на родном языке, так ещё и на форуме отвечают, буржуи негодяйские. Совсем обнаглели! Я негодую!!!
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.01.2016, 19:17
Цитата Сообщение от Vivevnev Посмотреть сообщение
А что насчет http://stackoverflow.com?
Да да да, там вот много ответов, а без знания английского ты не можешь получить доступ к этим знаниям. Об этом я и говорю.

Цитата Сообщение от Vivevnev Посмотреть сообщение
но там я ниразу не видел ответов в стиле "загугли, идиот, нафиг ты сюда приперся?"
Ну и тупых вопросов я там не видел, на которые так хотелось бы ответить или вопросов в стиле (вот моя лаба, решите мне ее за меня) я там тоже не видел. По этому и ответов с посылом в нужное место нет.
0
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14
29.01.2016, 19:20  [ТС]
Зачем им вообще вопросы задавать, если всё есть в документации на родном языке? А вопросы там есть такие, на которые и я мог бы ответить, несмотря на то, что читал только "обрывки" русской документации.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.01.2016, 19:30
Цитата Сообщение от Vivevnev Посмотреть сообщение
Зачем им вообще вопросы задавать, если всё есть в документации на родном языке?
Из-за недостатка знаний не всегда все могут разобраться с докой. Вот на пример тебе, что мешало взять и разобраться? Литература русскоязычная в сети есть, форумы с похожими вопросами есть.
0
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14
29.01.2016, 19:51  [ТС]
Я отвечу на этот вопрос. Потому что я её не нашел. Возможно она и есть, но я не нашел её в куче мусора с советами погуглить. Если бы её так просто было найти, то я сюда бы и не обратился, логично? Знаешь почему я в шапке сказал и про PIL, и про Label, и про прочее? Потому что это не первый форум, где я искал ответ.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.01.2016, 19:53
Ну вот это ответ на твой предыдущий вопрос)
0
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14
29.01.2016, 20:05  [ТС]
Ну, мои вопросы (кроме по теме) были риторическими. На них (обычно) не отвечают ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2016, 20:05
Помогаю со студенческими работами здесь

Почему выдаёт ошибку PhotoImage
Почему когда я пытаюсь загрузить фотографию в качестве фона приложения, мне пишет &quot;No such file or directory&quot;, хотя фотография...

Кто может объяснить почему в Frame на Toplevel не появляются виджеты?
Писал программу что бы посмотреть что такое пайтон и нашел не понятную мне вещь, которую не смог разобрать сам.. Есть класс, в нем...

TopLevel и основной класс
Всем привет! Я новичок в программировании и мне нужна помощь с написание программы на tkinter. У меня есть функция dbl_click в классе...

Tkinter - непонимание с виджетом Toplevel
В данный момент я работаю над программой &quot;графической рисовалкой&quot; и столкнулся с проблемой и не знаю как её преодолеть. Мне нужно, чтобы...

Изменить размер картинки PhotoImage из tkinter
Есть код: i1=PhotoImage(file=&quot;res\\1h.gif&quot;) Хранится картинка, размер которой эквивалентен разрешению фотографии. Каким образом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru