class Menu(object):
def __init__ (self,x,y):
self.x = x
self.y = y
self.button_height = 20
self.b1 = Button(x = ..., y = ...) # у класса "Button" есть параметры x и y
self.b2 = Button(x = ..., y = ...)
...
self.buttons = [self.b1, self.b2, ...]
self.place_buttons()
def place_buttons(self):
for i in range(0, len(self.buttons)):
self.buttons[i].x = self.x
self.buttons[i].y = self.y + i*self.button_height
class Window(gui_window):
def __init__(self, args):
...
self.width = 479
self.height = 1723
...
# передаваемые изначально координаты примерно так выглядят
self.menu = Menu(x = self.width + self.elem2.size / (2 *
(1 + self.elem1.length * self.elem1.base_size)), y = 5 )
self.go_fullscreen() # разумеется, это не в ините стоит, а по
# выбору в настройках делается.
def go_fullscreen(self):
self.set_fullscreen(True)
# размеры "окна" изменились, перемещаем кнопочки
self.menu.place_buttons()
# вот только menu.x как имело присвоенное в __init__ значение,
# так и имеет, так что повторный вызов этой функции (первый раз
# из самого menu была вызвана) не изменит ничего.
# А вот если делать self.menu = Menu(x = lambda: self.width +...),
# то всё работает как мне хочется.
# передавать каждый раз в self.menu.place_buttons(длинный_аргумент_координаты)
# довольно неразумно, если можно просто записать выражение в один из
# параметров самого класса Menu.
Y2xhc3MgTWVudShvYmplY3QpOgoJZGVmIF9faW5pdF9fIChzZWxmLHgseSk6CgkJc2VsZi54ID0geAoJCXNlbGYueSA9IHkKCQkKCQlzZWxmLmJ1dHRvbl9oZWlnaHQgPSAyMAoJCXNlbGYuYjEgPSBCdXR0b24oeCA9IC4uLiwgeSA9IC4uLikgIyDRgyDQutC70LDRgdGB0LAgIkJ1dHRvbiIg0LXRgdGC0Ywg0L/QsNGA0LDQvNC10YLRgNGLIHgg0LggeQoJCXNlbGYuYjIgPSBCdXR0b24oeCA9IC4uLiwgeSA9IC4uLikKCQkuLi4KCQlzZWxmLmJ1dHRvbnMgPSBbc2VsZi5iMSwgc2VsZi5iMiwgLi4uXQoJCQoJCXNlbGYucGxhY2VfYnV0dG9ucygpCgkJCglkZWYgcGxhY2VfYnV0dG9ucyhzZWxmKToKCQlmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5idXR0b25zKSk6CgkJCXNlbGYuYnV0dG9uc1tpXS54ID0gc2VsZi54CgkJCXNlbGYuYnV0dG9uc1tpXS55ID0gc2VsZi55ICsgaSpzZWxmLmJ1dHRvbl9oZWlnaHQKCQpjbGFzcyBXaW5kb3coZ3VpX3dpbmRvdyk6CglkZWYgX19pbml0X18oc2VsZiwgYXJncyk6CgkJLi4uCgkJc2VsZi53aWR0aCA9IDQ3OQoJCXNlbGYuaGVpZ2h0ID0gMTcyMwoJCS4uLgoJCSMg0L/QtdGA0LXQtNCw0LLQsNC10LzRi9C1INC40LfQvdCw0YfQsNC70YzQvdC+INC60L7QvtGA0LTQuNC90LDRgtGLINC/0YDQuNC80LXRgNC90L4g0YLQsNC6INCy0YvQs9C70Y/QtNGP0YIKCQlzZWxmLm1lbnUgPSBNZW51KHggPSBzZWxmLndpZHRoICsgc2VsZi5lbGVtMi5zaXplIC8gKDIgKiAKCQkJCQkJKDEgKyBzZWxmLmVsZW0xLmxlbmd0aCAqIHNlbGYuZWxlbTEuYmFzZV9zaXplKSksIHkgPSA1ICkKCQkKCQlzZWxmLmdvX2Z1bGxzY3JlZW4oKSAJIyDRgNCw0LfRg9C80LXQtdGC0YHRjywg0Y3RgtC+INC90LUg0LIg0LjQvdC40YLQtSDRgdGC0L7QuNGCLCDQsCDQv9C+CgkJCQkJCQkJIyDQstGL0LHQvtGA0YMg0LIg0L3QsNGB0YLRgNC+0LnQutCw0YUg0LTQtdC70LDQtdGC0YHRjy4KCglkZWYgZ29fZnVsbHNjcmVlbihzZWxmKToKCQlzZWxmLnNldF9mdWxsc2NyZWVuKFRydWUpCgkJIyDRgNCw0LfQvNC10YDRiyAi0L7QutC90LAiINC40LfQvNC10L3QuNC70LjRgdGMLCDQv9C10YDQtdC80LXRidCw0LXQvCDQutC90L7Qv9C+0YfQutC4CgkJc2VsZi5tZW51LnBsYWNlX2J1dHRvbnMoKQoJCSMg0LLQvtGCINGC0L7Qu9GM0LrQviBtZW51Lngg0LrQsNC6INC40LzQtdC70L4g0L/RgNC40YHQstC+0LXQvdC90L7QtSDQsiBfX2luaXRfXyDQt9C90LDRh9C10L3QuNC1LCAKCQkjINGC0LDQuiDQuCDQuNC80LXQtdGCLCDRgtCw0Log0YfRgtC+INC/0L7QstGC0L7RgNC90YvQuSDQstGL0LfQvtCyINGN0YLQvtC5INGE0YPQvdC60YbQuNC4ICjQv9C10YDQstGL0Lkg0YDQsNC3IAoJCSMg0LjQtyDRgdCw0LzQvtCz0L4gbWVudSDQsdGL0LvQsCDQstGL0LfQstCw0L3QsCkg0L3QtSDQuNC30LzQtdC90LjRgiDQvdC40YfQtdCz0L4uCgkKCSMg0JAg0LLQvtGCINC10YHQu9C4INC00LXQu9Cw0YLRjCBzZWxmLm1lbnUgPSBNZW51KHggPSBsYW1iZGE6IHNlbGYud2lkdGggKy4uLiksCgkjINGC0L4g0LLRgdGRINGA0LDQsdC+0YLQsNC10YIg0LrQsNC6INC80L3QtSDRhdC+0YfQtdGC0YHRjy4KCQoJIyDQv9C10YDQtdC00LDQstCw0YLRjCDQutCw0LbQtNGL0Lkg0YDQsNC3INCyIHNlbGYubWVudS5wbGFjZV9idXR0b25zKNC00LvQuNC90L3Ri9C5X9Cw0YDQs9GD0LzQtdC90YJf0LrQvtC+0YDQtNC40L3QsNGC0YspCgkjINC00L7QstC+0LvRjNC90L4g0L3QtdGA0LDQt9GD0LzQvdC+LCDQtdGB0LvQuCDQvNC+0LbQvdC+INC/0YDQvtGB0YLQviDQt9Cw0L/QuNGB0LDRgtGMINCy0YvRgNCw0LbQtdC90LjQtSDQsiDQvtC00LjQvSDQuNC3CgkjINC/0LDRgNCw0LzQtdGC0YDQvtCyINGB0LDQvNC+0LPQviDQutC70LDRgdGB0LAgTWVudS4=