Не наследуются атрибуты через tkinter.button
Пишу небольшую пошаговую стратегию в рамках курсовой. В данном коде в функции def move я пытаюсь переместить атрибуты с одной кнопки на другую, визуально они вроде бы перемещаются, но когда я пытаюсь вызвать get_info я ничего не получаю. Сижу уже часов 5, не могу понять как исправить.
import random
import tkinter as tk
from PIL import Image, ImageTk
import threading
class Color(object):
EMPTY = 0
BLACK = 1
WHITE = 2
class Move:
xstart = -1
ystart = 0
xdest = 0
ydest = 0
class Field_btn(tk.Button):
color = Color.EMPTY
Getstatus = None
def __init__(self, color, master, x, y, *args, **kwargs):
super(Field_btn, self).__init__(master, width=6, height=3, *args, **kwargs)
self.x = x
self.y = y
self.color = color
def get_moves(self, filed_btn, turn):
pass
def __str__(self):
return '0'
def get_info(self, filed_btn, x, y):
pass
def __repr__(self):
return f'Пусто {self.x} {self.y}'
def nextturn(self):
pass
class Unit(tk.Button, object):
IMG = None
MovementPointStart = None
Getstatus = 0
def __init__(self, color, master, x, y, *args, **kwargs):
self.color = color
super(Unit, self).__init__(master, width=6, height=3, *args, **kwargs)
self.x = x
self.y = y
self.color = color
def __str__(self):
return self.IMG[0 if self.color == Color.WHITE else 1]
def __repr__(self):
return f'Юнит {self.x} {self.y} {self.Heatl} {Unit.__str__(self)}'
def nextturn(self):
print('sosu')
if self.MovementPointsStart > self.MovementPoints:
print(self.MovementPointsStart)
self.MovementPoints = self.MovementPointsStart
print('sosnul')
else:
print('pososal')
pass
def get_info(self, filed_btn, x, y):
info = 0
if self.color == Color.BLACK:
info = (type(self), self.Heatl, self.MovementPointsStart, str('/'), self.MovementPoints, 'Black')
else:
info = (type(self), self.Heatl, self.MovementPointsStart, str('/'), self.MovementPoints,'White')
return info
def get_moves(self, filed_btn, turn):
print(turn)
i = 1
while i==1:
print('zestko')
if turn % 2 == 0 and self.color == Color.WHITE:
print('sosnul')
if self.MovementPoints > 0:
print('huiza')
if filed_btn.get_color(Move.xstart, Move.ystart) == Color.WHITE or filed_btn.get_color(Move.xdest, Move.ydest) == Color.EMPTY:
if Move.xdest < Move.xstart:
xend = Move.xstart - Move.xdest
else:
xend = Move.xdest - Move.xstart
if Move.ydest < Move.ystart:
yend = Move.ystart - Move.ydest
else:
yend = Move.ydest - Move.ystart
self.MovementPoints = self.MovementPoints - (xend + yend)
break
break
else:
print("У вас нет очков перемещения")
break
else:
if turn % 2 == 0:
print("Сейчас не ваш ход")
if turn % 2 == 1 and self.color == Color.BLACK:
print('sosnul')
if self.MovementPoints > 0:
print('huiza')
if filed_btn.get_color(Move.xstart, Move.ystart) == Color.BLACK or filed_btn.get_color(Move.xdest, Move.ydest) == Color.EMPTY:
if Move.xdest < Move.xstart:
xend = Move.xstart - Move.xdest
else:
xend = Move.xdest - Move.xstart
if Move.ydest < Move.ystart:
yend = Move.ystart - Move.ydest
else:
yend = Move.ydest - Move.ystart
self.MovementPoints = self.MovementPoints - (xend + yend)
break
else:
print("У вас нет очков перемещения")
break
else:
print("Сейчас не ваш ход")
break
class Pawn(Unit):
IMG = ('♟', '♙')
Heatl = 150
MovementPoints = 15
MovementPointsStart = 15
class Game:
turn = 0
ROW = 10
COLUMNS = 10
win = tk.Tk()
win.title('Eve Offline')
win.geometry("900x560")
x=0
y=0
def __init__(self):
self.field_btn = []
for x in range(Game.ROW):
temp = []
for y in range(Game.COLUMNS):
btn = Field_btn(Color.EMPTY, Game.win, bg='green', x=x, y=y, text='bebra')
temp.append(btn)
self.field_btn.append(temp)
def set_unit(self):
self.field_btn[1][2] = Pawn(Color.WHITE, Game.win, x=2, y=1, text='♙')
self.field_btn[9][9] = Pawn(Color.BLACK, Game.win, x=9, y=9, text='♟')
for x in range (Game.ROW):
for y in range (Game.COLUMNS):
self.field_btn[x][y].config(command=lambda button=self.field_btn[x][y]: self.get_click(button))
def create_window(self):
for x in range(Game.ROW):
for y in range(Game.COLUMNS):
btn = self.field_btn[x][y]
btn.grid(row=x, column=y)
Muvprikaz = tk.Button(bg='green', width=20, height=4, text='MOVE', activebackground='blue')
Muvprikaz.config(command=lambda button=self.Muvprikaz: self.Muvprikaz())
Muvprikaz.place(x=550, y=300)
NextturnB = tk.Button(bg='gray', width=20, height=4, text='Next Turn')
NextturnB.config(command=lambda button=self.nextturn(Game.turn): self.nextturn(button))
NextturnB.place(x=700, y=300)
def start(self):
self.set_unit()
self.create_window()
self.print_button()
self.win.mainloop()
def print_button(self):
for row_btn in self.field_btn:
print(row_btn)
def get_color(self, x, y):
return self.field_btn[y][x].color
def get_info(self, x, y):
return self.field_btn[y][x].get_info(self, x, y)
def move(self):
print(Move.xdest, Move.ydest)
print('sukablat')
print([Move.xdest],[Move.ydest])
self.field_btn[Move.xdest][Move.ydest].config(background='green', text='SS')
self.field_btn[Move.xdest][Move.ydest].config(command=lambda button=self.field_btn[Move.xdest][Move.ydest]: self.get_click(button))
self.field_btn[Move.xdest][Move.ydest] = self.field_btn[Move.xstart][Move.ystart]
self.field_btn[Move.xstart][Move.ystart] = Field_btn(Color.EMPTY, Game.win, bg='green', x=Move.xstart, y=Move.ystart, text='bebra')
for x in range (Game.ROW):
for y in range (Game.COLUMNS):
self.field_btn[x][y].config(command=lambda button=self.field_btn[x][y]: self.get_click(button))
self.create_window()
self.field_btn[Move.xstart][Move.ystart].Getstatus = 0
print('blatsuka')
self.field_btn[Move.xstart][Move.ystart].config(bg='green', text='bebra')
self.Update()
def nextturn(self, turn):
self.turn +=1
print(self.turn)
for x in range(Game.ROW):
for y in range(Game.COLUMNS):
if self.field_btn[x][y] == self.field_btn[x][y]:
self.field_btn[x][y].nextturn()
print("hui")
return turn
def get_click(self, clicked_button):
if Unit.Getstatus == 0:
print(Unit.Getstatus)
x = (clicked_button.x)
y = (clicked_button.y)
Unit.Getstatus = Unit.Getstatus+1
clicked_button.config(bg='red')
self.print_button()
print(self.get_info(x, y))
print(Unit.Getstatus)
Move.xstart = x
Move.ystart = y
Unit.Getstatus == 0
elif Unit.Getstatus == 1:
Unit.Getstatus = 0
print(Unit.Getstatus)
clicked_button.config(bg='green')
def dest_click(self, clicked_button):
x = (clicked_button.x)
y = (clicked_button.y)
clicked_button.config(bg='blue')
Move.xdest = x
Move.ydest = y
print(Move.ydest, Move.xdest)
print('eblan')
self.Move()
def Move(self):
self.field_btn[Move.xstart][Move.ystart].get_moves(self, self.turn)
self.move()
def Muvprikaz(self):
if Move.xstart>-1:
self.print_button()
print(Move.xstart, Move.ystart)
for x in range (Game.ROW):
for y in range (Game.COLUMNS):
self.field_btn[x][y].config(command=lambda button=self.field_btn[x][y]: self.dest_click(button))
else:
pass
def Update(self):
for x in range (Game.ROW):
for y in range (Game.COLUMNS):
self.field_btn[x][y].config(command=lambda button=self.field_btn[x][y]: self.get_click(button))
Move.xstart = -1
Move.ystart = 0
Move.xdest = 0
Move.ydest = 0
g = 1
game = Game()
game.start()