Что делают эти строчки?
Это только та часть кода, в которой я не понимаю и хочу разобраться. Сколько бы я не искал в инете и ютубе, всё как-то не так объясняют.
class Main(Frame):
def __init__(self, root):
super(Main, self).__init__(root)
self.startUI()
ВЕСЬ КОД (ЕСЛИ НАДО)
from tkinter import *
import random as rdm
from PIL import ImageTk, Image
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="white", font=("Times New Roman", 20, "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)
# +++
self.imgLabel = Label(root)
self.imgLabel.place(x=330, y=20, width=50, height=50)
def btn_click(self, choise):
comp_choise = rdm.randint(1, 3)
if choise == comp_choise:
self.drow += 1
self.lbl.configure(text="Ничья")
img = ImageTk.PhotoImage(Image.open("E:\PYTHON\QUIZ\XZ.jpg"))
self.imgLabel.configure(image=img)
self.imgLabel.image = img
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="Победа")
img = ImageTk.PhotoImage(Image.open("E:\PYTHON\QUIZ\Win.jpg"))
self.imgLabel.configure(image=img)
self.imgLabel.image = img
else:
self.lose += 1
self.lbl.configure(text="Проигрыш")
img = ImageTk.PhotoImage(Image.open("E:\PYTHON\QUIZ\LOSE.jpg"))
self.imgLabel.configure(image=img)
self.imgLabel.image = img
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()
Ответы (2 шт):
Здесь создаётся класс, с наследованием от Frame(т.е. создаётся свой(кастомный) Frame, который можно будет использовать как и обычный, но при создании он уже будет заполнен тем, что вы напишете. Потом определяется метод __init__, который вызывается когда вы создаёте объект класса. Затем с помощью super(Main, self).__init__(root) дополняется __init__ класса Frame. Это означает, что вы как бы дописываете свой код, к тому, что уже есть у Frame в __init__. Подробнее можно почитать здесь. А после идёт код, который вы дописываете(в частности вызываете функцию self.startUI(), в которой наполняете Frame кнопками, виджетами и т.д). Надеюсь хотя бы немного помог
Класс Frame Является предком класса Main.Все созданные объекты класса Main будут обладать свойствами(атрибутами и методами) класса Frame:
class Main(Frame):
Инициализация класса Main:
def __init__(self, root):
Переопределение у Класса Main метода __init__()(который должен был работать также как у класса Frame):
super(Main, self).__init__(root)
При инициализации объекта Main, сработает метод startUI(). Именно этим и будет инициализация объектов класса Main отличаться от инициализации объектов класса Frame:
self.startUI()