fork download
  1. class Menu(object):
  2. def __init__ (self,x,y):
  3. self.x = x
  4. self.y = y
  5.  
  6. self.button_height = 20
  7. self.b1 = Button(x = ..., y = ...) # у класса "Button" есть параметры x и y
  8. self.b2 = Button(x = ..., y = ...)
  9. ...
  10. self.buttons = [self.b1, self.b2, ...]
  11.  
  12. self.place_buttons()
  13.  
  14. def place_buttons(self):
  15. for i in range(0, len(self.buttons)):
  16. self.buttons[i].x = self.x
  17. self.buttons[i].y = self.y + i*self.button_height
  18.  
  19. class Window(gui_window):
  20. def __init__(self, args):
  21. ...
  22. self.width = 479
  23. self.height = 1723
  24. ...
  25. # передаваемые изначально координаты примерно так выглядят
  26. self.menu = Menu(x = self.width + self.elem2.size / (2 *
  27. (1 + self.elem1.length * self.elem1.base_size)), y = 5 )
  28.  
  29. self.go_fullscreen() # разумеется, это не в ините стоит, а по
  30. # выбору в настройках делается.
  31.  
  32. def go_fullscreen(self):
  33. self.set_fullscreen(True)
  34. # размеры "окна" изменились, перемещаем кнопочки
  35. self.menu.place_buttons()
  36. # вот только menu.x как имело присвоенное в __init__ значение,
  37. # так и имеет, так что повторный вызов этой функции (первый раз
  38. # из самого menu была вызвана) не изменит ничего.
  39.  
  40. # А вот если делать self.menu = Menu(x = lambda: self.width +...),
  41. # то всё работает как мне хочется.
  42.  
  43. # передавать каждый раз в self.menu.place_buttons(длинный_аргумент_координаты)
  44. # довольно неразумно, если можно просто записать выражение в один из
  45. # параметров самого класса Menu.
Runtime error #stdin #stdout #stderr 0.1s 10104KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 19, in <module>
NameError: name 'gui_window' is not defined