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

Toplevel + PhotoImage

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

Author24 — интернет-сервис помощи студентам
Добрый день. Проблема в следующем, картинка не отображается в окне 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2016, 22:17
Ответы с готовыми решениями:

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

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

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

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

12
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.01.2016, 15:03 2
Лучший ответ Сообщение было отмечено 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  [ТС] 3
Ну это естественно, потому что когда функция заканчивает свое выполнение, то все объекты в ее области видимости удаляются (в том числе и твоя картинка).
alex925, Действительно. Всё дело было в этом. Я читал об этом, но так как упоминалось это всколзь и не было примера, то упустил это из вида. Спасибо большое.

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

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

Цитата Сообщение от Vivevnev Посмотреть сообщение
но там я ниразу не видел ответов в стиле "загугли, идиот, нафиг ты сюда приперся?"
Ну и тупых вопросов я там не видел, на которые так хотелось бы ответить или вопросов в стиле (вот моя лаба, решите мне ее за меня) я там тоже не видел. По этому и ответов с посылом в нужное место нет.
0
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14
29.01.2016, 19:20  [ТС] 9
Зачем им вообще вопросы задавать, если всё есть в документации на родном языке? А вопросы там есть такие, на которые и я мог бы ответить, несмотря на то, что читал только "обрывки" русской документации.
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.01.2016, 19:30 10
Цитата Сообщение от Vivevnev Посмотреть сообщение
Зачем им вообще вопросы задавать, если всё есть в документации на родном языке?
Из-за недостатка знаний не всегда все могут разобраться с докой. Вот на пример тебе, что мешало взять и разобраться? Литература русскоязычная в сети есть, форумы с похожими вопросами есть.
0
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14
29.01.2016, 19:51  [ТС] 11
Я отвечу на этот вопрос. Потому что я её не нашел. Возможно она и есть, но я не нашел её в куче мусора с советами погуглить. Если бы её так просто было найти, то я сюда бы и не обратился, логично? Знаешь почему я в шапке сказал и про PIL, и про Label, и про прочее? Потому что это не первый форум, где я искал ответ.
0
2741 / 2340 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.01.2016, 19:53 12
Ну вот это ответ на твой предыдущий вопрос)
0
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 14
29.01.2016, 20:05  [ТС] 13
Ну, мои вопросы (кроме по теме) были риторическими. На них (обычно) не отвечают ))
0
29.01.2016, 20:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2016, 20:05
Помогаю со студенческими работами здесь

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

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

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

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

ERROR: toplevel: Undefined procedure: readint/1 (DWIM could not correct goal) | SWI-Prolog
Начали изучать пролог по методичке отсюда. Пример: Сформировать список из N элементов, начиная с...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru