146 / 1 / 1
Регистрация: 06.10.2019
Сообщений: 17

Не выводится картинка при использовании функций

29.04.2020, 09:22. Показов 3057. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день, недавно столкнулся с проблемой, что если любым способом (canvas или pack) выводить картинку, но делать это из собственной функции то выводится пустой объект, который соответствует заданным размерам и занимает место как-будто он есть, однако если делать тоже самое но без использования функции то все нормально. Подскажите как решить. Сам код работает исправно
Заранее спасибо

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
import requests 
import re
import tkinter as tk
from PIL import Image, ImageTk
from io import BytesIO
root = tk.Tk()
canvas = tk.Canvas(root,width=500,height=500)
 
headers = {
   'User-Agent': 'Юзер агент'
        }                       
def buildimg(g):
    image = ImageTk.PhotoImage(Image.open(BytesIO(g)))                   #BytesIO нужно чтобы работа с байт кодом как с изображением
    canvas.create_image(300, 300, image=image)                           #Выводим изображение с использование canvas, хотя можно и pack(), но это всераавно не сработало
 
url1 = ('https://prnt.sc/rw0juc')                        
r = requests.get(url1, headers = headers)                                #Производим "захват" веб-страницы
text = r.text                                                            #Просматриваем структуру страницы
p = re.compile(r'image/.{22}.png')                                       #Регулярное выражение для поиска ссылки на картинку
img = re.search(p,text)                                                  #Производим поиск с помощью RegEx по pattern = "p" и обЪект поиска = "tx"
if img != None:                                                          #Если регулярное выражение нашло ссылку то...
    u = 'https://image.************/'+str(img)[44:76]                    #Присаиваем переменное "u" значение str от резульата поиска регулярки 
    v = requests.get(u, headers = headers)                               #Производим "захват" веб-страницы с картинкой
    g = v.content                                                        #Беру байт код картинки
 
canvas.pack()                                                            #Упаковываем canvas
buildimg(g)                                                              #Передаю в функцию байт код картинки для того чтобы вывести картинку
btnnext = tk.Button(text = ">")                                          #Кнопки потом доделаю
btnprev = tk.Button(text = "<")                                          
btnnext.pack()                                                           #Просто кнопки
btnprev.pack()
                                                        
root.mainloop()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2020, 09:22
Ответы с готовыми решениями:

Не выводится результат MySQL (при использовании AJAX)
При обычной загрузке страницы всё нормально, но при использовании AJAX всё идёт наперекосяк. Т.е. загружается исполняемый скрипт...

Выводится мусор в конце строки при использовании wprintf()
Ну собственно вот: #define UNICODE #define _UNICODE #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include...

Почему в консоли браузера ничего не выводится при использовании console.log()?
Здравствуйте, подскажите пожалуйста. В консоли моего браузера фаерфокс ничего не выводится при использовании console.log(). Как я понимаю,...

3
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
29.04.2020, 11:43
Цитата Сообщение от Anon1 Посмотреть сообщение
str(img)[44:76]
Оригинально, конечно, но можно и попроще

Python
1
img.group(0)
а самая проблема в том, что tkinter не сохраняет ссылки на изображения и при выходе из функции сборщик мусора все очищает, можно сделать так

Python
1
2
3
4
5
images = []                     
def buildimg(g):
    image = ImageTk.PhotoImage(Image.open(BytesIO(g)))
    canvas.create_image(300, 300, image=image)                           
    images.append(image)
1
146 / 1 / 1
Регистрация: 06.10.2019
Сообщений: 17
29.04.2020, 12:48  [ТС]
Ответ хороший, но как все таки выводить на экран картинку, возможно через классы, однако мои знания не позволяют этого сделать, помогите если не трудно.

Нужно чтобы нажал кнопку, предыдущая картинка удалилась и новая отобразилась, однако как сделать это не через функцию я не знаю. Буду благодарен за ответ или за полезную литературу по этой теме
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
29.04.2020, 13:19
Цитата Сообщение от Anon1 Посмотреть сообщение
Нужно чтобы нажал кнопку, предыдущая картинка удалилась и новая отобразилась, однако как сделать это не через функцию я не знаю.
Не очень понятно, что вы хотите получить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2020, 13:19
Помогаю со студенческими работами здесь

Не выводится по isbn определённая картинка для каждой книги,но выводится просто по имени картинки а мне нужно
Не выводится по isbn определённая картинка для каждой книги,но выводится просто по имени картинки, а мне нужно чтоб выводилось по isbn. ...

Выводится картинка на view сразу при запуске программы и только один раз
Ну собственно это продолжение вопроса на мой предыдущий вопрос про вывод картинки, с выводом я почти разобрался, в свойстве customclass...

При использовании функции log (x) при компиляции выводится ошибка "unknown identifier"
Добрый день, при использовании функции log(x) при компиляции выводится ошибка &quot;unknown identifier&quot;. Разве эта функция не...

Ошибка при использовании функций
Здравствуйте! Есть код, в котором значения теплопроводности, теплоемкости и плотности заданы функциями: clc, clear all lmd_fld...

Ошибка выполнения программы при использовании функций
Все привет, друзья! Имеется задача: Последовательность {Ai}i-1 образована по правилу Ai=1/i. Дано вещественное число 0&lt;eps&lt;0.1....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru