Помогите с кодом замена TEXT на PNG в TKinter

NeZZoXiL

Новичок
Пользователь
Дек 9, 2021
2
0
1
Нужно сделать так чтобы при "self.lbl.configure(text="Ничья")" выводилась картинка png формата (XZ.png), при"self.lbl.configure(text="Победа")" выводилось (WIN.png) и при"self.lbl.configure(text="Проигрыш")" вывод (LOSE.png)


Код:
from tkinter import *
import random as rdm


class Main(Frame):
    def __init__(self, root):
        super(Main, self).__init__(root)
        self.startUI()

    def startUI(self):
        btn = Button(root, text="Камень", font=("Times New Roman", 15),
                     command=lambda x=1: self.btn_click(x))
        btn2 = Button(root, text="Ножницы", font=("Times New Roman", 15),
                      command=lambda x=2: self.btn_click(x))
        btn3 = Button(root, text="Бумага", font=("Times New Roman", 15),
                      command=lambda x=3: self.btn_click(x))

        btn.place(x=10, y=100, width=120, height=50)
        btn2.place(x=155, y=100, width=120, height=50)
        btn3.place(x=300, y=100, width=120, height=50)

        self.lbl = Label(root, text="Начало игры!", bg="#FFF", font=("Times New Roman", 21, "bold"))
        self.lbl.place(x=150, y=25)

        self.win = self.drow = self.lose = 0

        self.lbl2 = Label(root, justify="left", font=("Times New Roman", 13),
                         text=f"Побед: {self.win}\nПроигрышей:"
                              f" {self.lose}\nНичей: {self.drow}",
                         bg="#FFF")
        self.lbl2.place(x=5, y=5)

    def btn_click(self, choise):
        comp_choise = rdm.randint(1, 3)

        if choise == comp_choise:
            self.drow += 1
            self.lbl.configure(text="Ничья")
        elif choise == 1 and comp_choise == 2 \
                or choise == 2 and comp_choise == 3 \
                or choise == 3 and comp_choise == 1:
            self.win += 1
            self.lbl.configure(text="Победа")
        else:
            self.lose += 1
            self.lbl.configure(text="Проигрыш")

        self.lbl2.configure(text=f"Побед: {self.win}\nПроигрышей:"
                              f" {self.lose}\nНичей: {self.drow}")

        del comp_choise


if __name__ == '__main__':
    root = Tk()
    root.geometry("430x160+200+200")
    root.title("Камень, ножницы, бумага")
    root.resizable(False, False)
    root["bg"] = "#FFF"
    app = Main(root)
    app.pack()
    root.mainloop()
 

Вложения

  • LOSE.png
    LOSE.png
    33,3 КБ · Просмотры: 2
  • XZ.png
    XZ.png
    40,7 КБ · Просмотры: 2
  • Win.png
    Win.png
    4,3 КБ · Просмотры: 2
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
Нужно сделать так
звучит как задание от начальника...
 

NeZZoXiL

Новичок
Пользователь
Дек 9, 2021
2
0
1
Поставить эти png рядом с текстом "Победа,проигрыш,ничья" и сделать нормальный масштаб png
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Нужно сделать так чтобы при "self.lbl.configure(text="Ничья")" выводилась картинка png формата (XZ.png), при"self.lbl.configure(text="Победа")" выводилось (WIN.png) и при"self.lbl.configure(text="Проигрыш")" вывод (LOSE.png)
Вот пример:
Python:
import tkinter as tk
import random as rdm
from PIL import Image
from PIL import ImageTk


class Main(tk.Frame):
    def __init__(self, root):
        super(Main, self).__init__(root)
        self.startUI()

    def startUI(self):
        btn = tk.Button(root, text="Камень", font=("Times New Roman", 15),
                        command=lambda x=1: self.btn_click(x))
        btn2 = tk.Button(root, text="Ножницы", font=("Times New Roman", 15),
                         command=lambda x=2: self.btn_click(x))
        btn3 = tk.Button(root, text="Бумага", font=("Times New Roman", 15),
                         command=lambda x=3: self.btn_click(x))

        btn.place(x=10, y=100, width=120, height=50)
        btn2.place(x=155, y=100, width=120, height=50)
        btn3.place(x=300, y=100, width=120, height=50)

        # создаем канву
        self.canvas = tk.Canvas(root, width=30, height=30)
        # загружаем изображения из файлов
        self.canvas.win = self.load_img("WIN.png")
        self.canvas.lose = self.load_img("LOSE.png")
        self.canvas.draw = self.load_img("XZ.png")
        # создаем пустую картинку на канве
        self.img = self.canvas.create_image([2, 2], anchor="nw")

        self.lbl = tk.Label(
            root, text="Начало игры!", bg="#FFF",
            font=("Times New Roman", 21, "bold"))
        self.lbl.place(x=150, y=25)

        self.win = self.drow = self.lose = 0

        self.lbl2 = tk.Label(
            root, justify="left", font=("Times New Roman", 13),
            text=f"Побед: {self.win}\nПроигрышей:"
                 f" {self.lose}\nНичей: {self.drow}", bg="#FFF")
        self.lbl2.place(x=5, y=5)

    def btn_click(self, choise):
        comp_choise = rdm.randint(1, 3)

        # устанавливаем картинку и позицию канвы
        # в зависимости от условия
        if choise == comp_choise:
            self.drow += 1
            self.lbl.configure(text="Ничья")
            self.change_img(self.canvas.draw, 245)
        elif choise == 1 and comp_choise == 2 \
                or choise == 2 and comp_choise == 3 \
                or choise == 3 and comp_choise == 1:
            self.win += 1
            self.lbl.configure(text="Победа")
            self.change_img(self.canvas.win, 250)
        else:
            self.lose += 1
            self.lbl.configure(text="Проигрыш")
            self.change_img(self.canvas.lose, 305)

        self.lbl2.configure(text=f"Побед: {self.win}\nПроигрышей:"
                            f" {self.lose}\nНичей: {self.drow}")

        del comp_choise

    def load_img(self, path):
        """Загрузка картинок из файла и масштабирование до 30х30"""
        img = Image.open(path)
        img = img.convert("RGBA")
        bands = img.split()
        bands = [b.resize((30, 30), Image.ANTIALIAS) for b in bands]
        img = Image.merge('RGBA', bands)
        img_tk = ImageTk.PhotoImage(img)
        return img_tk

    def change_img(self, img, x):
        """Установка картинки на канву и смена позиции канвы"""
        self.canvas.itemconfig(self.img, image=img)
        self.canvas.place(x=x, y=25)


if __name__ == '__main__':
    root = tk.Tk()
    root.geometry("430x160+200+200")
    root.title("Камень, ножницы, бумага")
    root.resizable(False, False)
    root["bg"] = "#FFF"
    app = Main(root)
    app.pack()
    root.mainloop()
 

Форум IT Специалистов