Как вставить картинку в tkinter
Перейти к содержимому

Как вставить картинку в tkinter

  • автор:

Canvas

Виджет Canvas предоставляет возможности рисования двухмерных фигур. Стоит отметить, что Canvas есть только в пакете tkinter , а в пакете tkinter.ttk аналог отсутствует.

Некоторые основные параметры Canvas:

  • bg / background : фоновый цвет
  • bd / border : граница
  • borderwidth : толщина границы
  • cursor : курсор
  • height : высота виджета
  • width : ширина виджета

По умолчанию Canvas представляет прямоугольную область:

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("300x300") canvas = Canvas(bg="white", width=250, height=250) canvas.pack(anchor=CENTER, expand=1) root.mainloop()

Canvas в Tkinter и Python

Для двухмерного рисования Canvas предоставляет ряд методов:

  • create_line() : рисует линию
  • create_rectangle() : рисует прямоугольник
  • create_oval() : рисует овал
  • create_arc() : рисует дугу
  • create_polygon() : рисует многоугольник
  • create_text() : добавляет текст
  • create_image() : добавляет изображение
  • create_window() : добавляет виджет

В качестве результата все эти методы возвращают идентифтикатор добавленного элемента. Этот идентификатор в дальнейшем может использоваться для управления элементом. Рассмотрим применение этих методов.

Создание линии

Для рисования линии применяется метод create_line() . Для вывода линии необходимо как минимум задать координаты точек, например:

create_line(__x0: float, __y0: float, __x1: float, __y1: float)

Параметры __x0 и __y0 представляют координаты начальной точки линии, а __x1 и __y1 — конечной.

Началом координат в Canvas считается верхней левый угол виджета — это точка с координатами (0,0). Таким образом, ось X направлена вправо, а ось Y — вниз.

Нарисуем простейшую линию:

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("300x300") canvas = Canvas(bg="white", width=250, height=250) canvas.pack(anchor=CENTER, expand=1) canvas.create_line(10, 10, 200, 50) root.mainloop()

Создание линии на Canvas в Tkinter и Python

Кроме того у данного метода можно выделить ряд дополнительных параметров:

  • arrow : помещает стрелку в начале линии (значение first), в конце (last) или на обоих концах (both)
  • arrowshape : позволяет изменить форму стрелки
  • capstyle : если линия не имеет стрелки, то устанавливает, как завершается линия. Принимает значения: butt (по умолчанию), projecting и round
  • joinstyle : управляет соединением сегметов линии. Принимает значения: round (по умолчанию), bevel и miter
  • smooth : если значение «true» или «bezier», сглаживает сегменты линии
  • splinesteps : управляет сглаживанием изогнутых линий

Параметры отрисовки

Методы отрисовки имеют ряд параметров, которые позволяют настроить стилизацию фигур. Некоторые из этих параметров:

  • fill : цвет заполнения фигуры
  • width : ширина линий
  • outline : для заполненных фигур цвет контура
  • dash : устанавливает пунктирную линию
  • stipple : устанавливает шаблон для заполнения фигуры (например, gray75, gray50, gray25, gray12)
  • activefill : цвет заполнения фигуры при наведении курсора
  • activewidth : ширина линий при наведении курсора
  • activestipple : шаблон заполнения фигуры при наведении курсора

Применим некоторые параметры:

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) canvas.create_line(10, 10, 200, 50, activefill="red", fill="blue", dash=2) canvas.create_line(10, 50, 200, 90, activefill="red", fill="blue", dash=2) root.mainloop()

В данном случае нарисованы две параллельные линии пунктиром синим цветом. При наведении на них указателя мыши, они окрашиваются в красный цвет.

окраска фигур и линий в tkinter и python

Создание прямоугольника

Для отрисовки прямоугольника применяется метод create_rectangle() , которому обязательно передаются координаты верхнего левого и правого нижнего угла:

create_rectangle(__x0: float, __y0: float, __x1: float, __y1: float)
from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) canvas.create_rectangle(10, 20, 200, 60, fill="#80CBC4", outline="#004D40") root.mainloop()

отрисовка прямоугольника на Canvas в tkinter и python

Отрисовка овала

Для отрисовки овала применяется метод create_oval() . В качестве обязательных параметров он принимает координаты прямоугольника, в который будет вписан овал. :

create_oval(__x0: float, __y0: float, __x1: float, __y1: float)

Пример использования метода:

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) canvas.create_oval(10, 10, 200, 50, fill="#80CBC4", outline="#004D40") canvas.create_rectangle(10, 10, 200, 50) root.mainloop()

Для наглядности здесь также отрисован прямоугольник, чтобы было видно как вписывается овал:

отрисовка овала на Canvas в tkinter и python

Отрисовка многоугольника

Для создания многоугольника применяется метод create_polygon() . Он принимает в качестве обязательных параметров набор координатов точек:

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) canvas.create_polygon(10, 30, 200, 200, 200, 30, fill="#80CBC4", outline="#004D40") root.mainloop()

В данном случае передаются координаты трех точек, которые в итоге станут вершинами треугольника

отрисовка многоугольника на Canvas в tkinter и python

Для упрощения также можно передавать набор кортежей, где каждый кортеж представляет отдельную точку:

points = ( (10, 30), (200, 200), (200, 30), ) canvas.create_polygon(*points, fill="#80CBC4", outline="#004D40")

Отрисовка дуги

Для отрисовки дуги применяется метод create_arc() , который принимает набор точек:

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) canvas.create_arc((10, 10), (200, 200), fill="#80CBC4", outline="#004D40") root.mainloop()

отрисовка дуги на Canvas в tkinter и python

Отображение текста

Для вывода текста применяется метод create_text() . Ключевыми его параметрами являются координаты точки вывода текста, а также параметр text — сам выводимый текст:

При выводе текста стоит учитывать, что по умолчанию указанные координаты представляют центральную точку вывода текста. Но это поведение можно изменить с помощью опции anchor .

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) canvas.create_text(50, 50, text="Hello METANIT.COM", fill="#004D40") canvas.create_text(50, 100, anchor=NW, text="Hello METANIT.COM", fill="#004D40") root.mainloop()

Здесь два раза выводится один и тот же текст. И в обоих случаях совпадает X-координата. Но во втором случае установлен параметр anchor : его значение «NW» указывает, что координаты будут представлять верхний левый угол прямогольной области, в которой выводится текст

вывод текста на Canvas в tkinter и python

С помощью параметра font можно задать шрифт, в том числе его высоту:

canvas.create_text(10, 10, font="Arial 14", anchor=NW, text="Hello METANIT.COM", fill="#004D40")

Вывод изображения

Для вывода изображения применяется метод create_image() , который в качестве обязательно параметра принимает координаты изображения. Для установки самого изображения в метод через параметр image передается ссылка на изображение:

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) python_image = PhotoImage(file="python.png") canvas.create_image(10, 10, anchor=NW, image=python_image) root.mainloop()

В данном случае координаты представлены точкой с x=10 и y=10, а изображение представляет объект PhotoImage (здесь предполагается, что в одной папке с файлом программы находится файл «python.png»). Но как и в случае с выводом текста, следует учитывать, что по умолчанию координаты представляют центр изображения. Чтобы настроить положение изображения относительно координат, применяется параметр anchor . Так, в данном случае значение «NW» означает, что координата представляет верхний левый угол изображения.

вывод изображения на Canvas в tkinter и python

Добавление виджетов

Одной из замечательных особенностей Canvas является то, что он позволяет добавлять другие виджеты и таким образом создавать сложные по композиции интерфейсы. Для этого применяется метод create_window() .

create_window(__x: float, __y: float, *, anchor: _Anchor = . height: _ScreenUnits = . state: Literal['normal', 'active', 'disabled'] = . tags: str | list[str] | tuple[str, . ] = . width: _ScreenUnits = . window: Widget = . ) -> _CanvasItemId create_window(__coords: tuple[float, float] | list[int] | list[float], *, anchor: _Anchor = . height: _ScreenUnits = . state: Literal['normal', 'active', 'disabled'] = . tags: str | list[str] | tuple[str, . ] = . width: _ScreenUnits = . window: Widget = . ) -> _CanvasItemId
  • _x и _y или __coords : координаты точки размещения виджета. По умолчанию представляет центр виджета
  • _anchor : устанавливает положение виджета относительно координат
  • height : высота виджета
  • width : ширина виджета
  • state : состояние виджета
  • tags : набор тегов, связанных с виджетом

В качестве результата этот метод возвращает идентификатор добавленного метода.

Например, добавим кнопку:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x250") canvas = Canvas(bg="white", width=250, height=200) canvas.pack(anchor=CENTER, expand=1) btn = ttk.Button(text="Click") canvas.create_window(10, 20, anchor=NW, window=btn, width=100, height=50) root.mainloop()

В данном случае верхний левый угол кнопки будет иметь координаты (x=10, y=20), а сама кнопка имеет ширину 100 и высоту 50 единиц. Если ширина и высота явным образом не указаны, то они имеют значения по умолчанию.

Добавление виджетов в Canvas в Tkinter и Python

Создание прокрутки

Для создания прокрутки виджет Canvas предоставляет параметр , который позволяет установить прокручиваемую область:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") h = ttk.Scrollbar(orient=HORIZONTAL) v = ttk.Scrollbar(orient=VERTICAL) canvas = Canvas(scrollregion=(0, 0, 1000, 1000), bg="white", yscrollcommand=v.set, xscrollcommand=h.set) h["command"] = canvas.xview v["command"] = canvas.yview canvas.grid(column=0, row=0, sticky=(N,W,E,S)) h.grid(column=0, row=1, sticky=(W,E)) v.grid(column=1, row=0, sticky=(N,S)) root.grid_columnconfigure(0, weight=1) root.grid_rowconfigure(0, weight=1) canvas.create_rectangle(10,10, 300, 300, fill="red") root.mainloop()

В данном случае устанавливается прокручиваемая область 1000х1000:

canvas = Canvas(scrollregion=(0, 0, 1000, 1000), .

Как добавить изображение в Tkinter?

В приведенном выше коде нет «Синтаксической ошибки» — она либо возникла в другой строке (вышеуказанный код не является всем вашим, так как нет импортов, нет объявления вашей переменной path ), либо вы получили какой-то другой тип ошибки. Пример выше работал отлично для меня, тестируя интерактивный интерпретатор.

Поделиться 13 апреля 2012 в 02:56
Вот пример для Python 3, который вы можете отредактировать для Python 2 😉

from tkinter import * from PIL import ImageTk, Image from tkinter import filedialog import os root = Tk() root.geometry("550x300+300+150") root.resizable(width=True, height=True) def openfn(): filename = filedialog.askopenfilename(title='open') return filename def open_img(): x = openfn() img = Image.open(x) img = img.resize((250, 250), Image.ANTIALIAS) img = ImageTk.PhotoImage(img) panel = Label(root, image=img) panel.image = img panel.pack() btn = Button(root, text='open image', command=open_img).pack() root.mainloop() 

enter image description here

Поделиться 20 апреля 2017 в 02:17

  1. у вас, вероятно, что-то отсутствует в вашем коде.
  2. пожалуйста, также проверьте кодировку файлов кода.
  3. убедитесь, что у вас установлен пакет PIL
import Tkinter as tk from PIL import ImageTk, Image path = 'C:/xxxx/xxxx.jpg' root = tk.Tk() img = ImageTk.PhotoImage(Image.open(path)) panel = tk.Label(root, image = img) panel.pack(side = "bottom", fill = "both", expand = "yes") root.mainloop() 

Поделиться 17 апреля 2012 в 06:50

Ваш фактический код может возвращать ошибку, основываясь на формате файла, на который указывает path . При этом некоторые форматы изображений, такие как.gif,.pgm (и.png, если tk.TkVersion >= 8.6), уже поддерживаются классом PhotoImage .

Ниже приведен пример, отображающий:

Lenna (.png)

или если tk.TkVersion < 8.6 :

try: # In order to be able to import tkinter for import tkinter as tk # either in python 2 or in python 3 except ImportError: import Tkinter as tk def download_images(): # In order to fetch the image online try: import urllib.request as url except ImportError: import urllib as url url.urlretrieve("https://i.stack.imgur.com/IgD2r.png", "lenna.png") url.urlretrieve("https://i.stack.imgur.com/sML82.gif", "lenna.gif") if __name__ == '__main__': download_images() root = tk.Tk() widget = tk.Label(root, compound='top') widget.lenna_image_png = tk.PhotoImage(file="lenna.png") widget.lenna_image_gif = tk.PhotoImage(file="lenna.gif") try: widget['text'] = "Lenna.png" widget['image'] = widget.lenna_image_png except: widget['text'] = "Lenna.gif" widget['image'] = widget.lenna_image_gif widget.pack() root.mainloop() 

Поделиться 30 января 2018 в 01:01

Это не стандартная библиотека Python 2.7. Поэтому, чтобы они работали правильно и если вы используете Python 2.7, сначала необходимо загрузить библиотеку PIL:

После установки, следуйте этим шагам:

  1. Убедитесь, что ваш script.py находится в той же папке сизображением , которое вы хотите показать.
  2. Отредактируйте ваш script.py

from Tkinter import * from PIL import ImageTk, Image app_root = Tk() #Setting it up img = ImageTk.PhotoImage(Image.open("app.png")) #Displaying it imglabel = Label(app_root, image=img).grid(row=1, column=1) app_root.mainloop() 

Надеюсь, это поможет!

Поделиться 18 октября 2014 в 14:33

Этот код работает для меня, также следует учитывать, что если у вас есть другие кнопки или метки в этом окне и вы не используете .place() , он не будет работать должным образом.

from Tkinter import* from PIL import Image, ImageTk img = Image.open("path/x.png") photo=ImageTk.PhotoImage(img) lab=Label(image=photo).place(x=50,y=50) 

Поделиться 02 сентября 2019 в 16:58

Мне нравится это и это работает:

def openImage(name): img = ImageTk.PhotoImage(Image.open(name)) Label(fen, image=img).place(x=100,y=100).pack() 

и вы вызываете функцию так:

openImage("yourImagePath") 

Поделиться 29 января 2023 в 00:45

Это проблема с версией Python. Если вы используете последнюю версию, то ваш старый синтаксис не будет работать и выдаст вам эту ошибку. Пожалуйста, следуйте коду @Josav09 и вы будете в порядке.

Поделиться 02 ноября 2017 в 17:54

Просто преобразуйте изображение в формате jpg в формат png. Это будет работать на 100%.

Добавляем картинки и пишем тамагочи

На самом деле все просто, достаточно просто добавить Label и задать для него фоновое изображение. Картинку можно утащить отсюда. Вот так.

from tkinter import * window = Tk() # открываем картинку luntik.gif, она лежит в одной папке с программой и кладем в переменную luntik_image luntik_image = PhotoImage(file='luntik.gif') # создаем текстовое поле и указываем, что туда нужно поместить картинку из переменной luntik_image Label(window, image=luntik_image).pack() mainloop()

Но есть один нюанс: tkinter не умеет работать с большинством популярных форматов графики, из коробки доступен только gif. Однако эта проблема легко решается установкой стороннего модуля Pillow !

Установка сторонних модулей

Если нам не хватает операций языка Python, а также встроенных модулей (библиотек), наступает тот самый момент, когда пора воспользоваться сторонними модулями.

Для установки модулей необходимо использовать программу pip, которая устанавливается на ваш компьютер вместе в питоном. Единственный нюанс, pip работает только через командную строку. Для ее вызова необходимо нажать Win+R , а затем в окне «Выполнить» ввести cmd и нажать Enter.

Для Mac вызов командной строки устроен аналогично, только вместо Win+R нужно использоватьл комбинацию Command + пробел , а затем в поле Spotlight ввести terminal.

Чтобы вызвать установщик пакетов, достаточно написать в консоли pip (или pip3 , если не работает команда pip ) и нажать Enter . Вы увидите что то похоже на.

Если команда pip не найдена, скорее всего при установке python вы не активировали галочку «Add to PATH».

Есть два варианта решения проблемы: переустановить python или добавить путь к питону в PATH вручную.

Добавляя к команде pip различные параметры, мы можем выполнять различные операции. Для начала давайте попробуем вывести список модулей, установленных на вашем компьютере. Для этого в командной строке необходимо ввести pip list , а затем нажать клавишу Enter (клавиша Enter нажимается для любой операции в командной строке).

В ответ мы получим длинный список из двух колонок, как на картинке выше. Слева пишется имя модуля, а справа текущая версия этого модуля. Если хотим посмотреть, установлен ли у нас какой-то конкретный модуль, то нужно ввести pip show . Для примера посмотрим, есть ли у меня модуль pillow , который мы будем будем использовать для работы с графикой.

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

Наличие больших и маленьких букв в названии модуля роли не играет. Даже если ввести pip show PiLloW , pip все равно вывел бы информацию о нем. Если какой-то модуль нам больше не нужен или возникла какая-то неполадка в его работе, то мы можем его удалить, введя pip uninstall .

Ничего сложного! А если я хочу обратно его установить, то мне нужно ввести pip install .

Вот и все. После установки, можно спокойно импортировать модули так же, как это было показано в предыдущих параграфах.

Мы перечислили некоторые самые важные возможности pip , хотя это далеко не полный их перечень. Для более подробного знакомства обратитесь к документации pip.

Поиск подходящих вам модулей можно осуществлять не только на в поисковике (Google, Yandex и т.д.), в качестве базы для поиска можно использовать Pypi, LDF или GitHub. Pypi содержит в себе поисковик, который позволяет отыскать не только модули, но и любые их модификации. После их можно установить либо по называнию pip install , либо скачать файл *.whl , который содержит ваш модуль.

Установка из файла аналогичена установке по названию. Сначала вам нужно вам нужно переместится в папку, где хранится файл *.whl , используя команду cd , а затем применить команду pip install . На LDF хранятся модули в формате *.whl , некоторые из которых уже нельзя найти на Pypi.

Также необходимый модуль можно установить из исходников с помощью команды pip install https://github.com/// . Так например, мы можем поставить pillow вот такой командой: pip install https://github.com/python-pillow/Pillow/master.zip .

Используем картинки любых форматов и меняем их размер

Итак, удобнее всего открывать картинки с использованием библиотеки для работы с графикой Pillow.

Сперва библиотеку нужно установить. Для этого в консоли нужно выполнить команду:

pip3 install pillow

Если консоль попросит права администратора, можно установить библиотеку только для своего пользователя.

pip3 install --user pillow

После этого можно открывать файлы в любых форматах.

from tkinter import * # импортируем функционал для работы с картинками из pillow, которую мы только что установили from PIL import Image, ImageTk window = Tk() # открываем изображение любого формата и кладем его в переменную image_file image_file = Image.open("brothers.jpeg") # "готовим" изображение к размещению в окне и кладем в переменную vp_image vp_image = ImageTk.PhotoImage(image_file) # добавляем после и устанавливаем картинку в качестве фона Label(window, image=vp_image).pack() mainloop()

В качестве бонуса — изменить размер картинки теперь можно прямо в коде.

# открываем изображение любого формата и кладем его в переменную image_file image_file = Image.open("brothers.jpeg") # меняем размер картинки на 300 на 300 пикселей image_file = image_file.resize((300, 300), Image.LANCZOS) # "готовим" изображение к размещению в окне и кладем в переменную vp_image vp_image = ImageTk.PhotoImage(image_file)

Используем таймер, цвет и размер шрифта

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

Для этого можно попросить tkinter вызвать нашу функцию не после нажатия на кнопку, а просто через несколько миллисекунд или секунд. Делается это с помощью метода after() . В примере ниже попробуем обновлять случайное число раз в секунду.

import random from tkinter import * # функция, которая будет обновлять число на экране def update_number(): # генерируем и записываем число в текстовое поле label.config(text=random.randint(1, 100)) # просим window вызвать функцию update_number еще раз через секунду (1000 мс) window.after(1000, update_number) window = Tk() # создаем текстовое поле # дополнительно указываем шрифт (семейство - Comic Sans MS, 25 - размер) и цвет (fg - foreground color) # padx и pady (padding x, padding y) в параметрах pack - это отступы от справа/слева и сверху/снизу label = Label(window, font=("Comic Sans MS", 25), fg="green") label.pack(padx=50, pady=50) # просим window вызвать функцию update_number через секунду (1000 мс) window.after(1000, update_number) mainloop()

Программа выше будет раз в секунду менять число на экране.

Анимация

А что если совместить вывод изображений и таймер? Получится анимация!

Единственное, что нам потребуется для этого — научится изменять уже заданную картинку с помощью .configure() .

Делается это так:

img1 = ImageTk.PhotoImage(Image.open("face1.jpg")) img2 = ImageTk.PhotoImage(Image.open("face2.jpg")) image_label = Label(window, image=img1) image_label.pack() # когда хотим поменять картинку - вызываем configure image_label.configure(image=img2)

Ниже пример простой анимации — лицо меняется каждые 800 мс.

from tkinter import * from PIL import Image, ImageTk import psutil # функция, которая будет двигать картинки def next_img(): global pic_number # если номер был 0 - он станет 1, а если был 1 - станет 0 pic_number = (pic_number + 1) % 2 # в зависимости от номера, выбираем нужную картинку if pic_number == 0: # и устанавливаем ее в image_label image_label.configure(image=img1) if pic_number == 1: image_label.configure(image=img2) # через долю секунды - вызываем смену картинки снова window.after(800, next_img) window = Tk() window.title("FaceIt") # открываем две картинки и изменяем их размер до 300 пикселей img1 = ImageTk.PhotoImage(Image.open("face1.jpg").resize((300, 300), Image.ANTIALIAS)) img2 = ImageTk.PhotoImage(Image.open("face2.jpg").resize((300, 300), Image.ANTIALIAS)) # тут будем хранить номер картинки, которую показываем сейчас pic_number = 0 # чтобы иметь возможность менять картинку, сохраняем поле в переменную image_label image_label = Label(window, image=img1) image_label.pack() # спустя долю секунды просим поменять картинку - запустить функцию next_img window.after(800, next_img) mainloop()

Бонус! Как заставить тамагочи жить, даже если программа закрыта?

Можно вычислять состояние питомца исходя из времени прошлого кормления / игры / купания, а это время сохранять в файл. Для простоты давайте использовать отдельные файлы для каждого действия — кормежки / игры и тд. Ниже пример с едой, для остальных — по аналогии.

Как сохранить время действия в файл?

import time # предположим, мы только что покормили питомца, фиксируем сколько сейчас времени last_feed_time = time.time() # открываем файл для записи with open('last_feed_time.txt', 'w') as file: # превращаем время в строку и записываем в файл file.write(str(last_feed_time))

Как достать время последнего из файла?

import time # если файл существует try: # открываем файл для чтения with open('last_feed_time.txt', 'r') as file: # и считываем время прошлой кормежки last_feed_time = int(file.read()) # а если файла нет except: # считаем, что только покормили last_feed_time = time.time()

Как вычислить сколько сейчас «жизни» исходя из прошедшего времени?

import time # это значение нужно взфть из файла, для примера просто возьмем текущее время минус 40 секунд last_feed_time = time.time() - 40 # максимум "жизни" max_life = 100 # сколько секунд на одну единицу "жизни" seconds_for_life_point = 10 # сколько времени прошло с прошлого кормления elapsed_time = time.time() - last_feed_time # жизнь не может быть меньше нуля life = max(0, int(max_life - elapsed_time / seconds_for_life_point))

Бонус! Прогресс-бар для отображения статуса питомца.

from tkinter.ttk import * from tkinter import * from tkinter import messagebox life = 100 # Функция для уменьшения жизни каждую секунду def check_life(): global life # уменьшаем жизнь life -= 1 # узаписываем жизнь в прогрессбар progress['value'] = life # если жизни мало - закрываем приложение if life 

Вставить картинку в Label

Пытаюсь вставить в Label картинку, но выдает ошибку Image ". " does not exist , путь точно верный.

from tkinter import * tk = Tk() img = PhotoImage("C:/Users/Public/Pictures/Sample Pictures/Lighthouse.jpg") b = Label(image = img) b.img = "C:/Users/Public/Pictures/Sample Pictures/Lighthouse.jpg" b.pack() tk.mainloop() 

Искал, да так и не нашел, в чем проблема. Пробовал писать im = Image.open(path_to_file) и соответственно img = PhotoImage(im) , но выдает ошибку.

Отслеживать

48.7k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков

задан 27 мая 2020 в 22:35

Werflame Xij Werflame Xij

81 1 1 золотой знак 3 3 серебряных знака 10 10 бронзовых знаков

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *