Я пишу проект, используя pygame- gui. Мне нужен класс Диаграмма , который будет заполнен текстом, рисунком и т. Д. c. Поэтому я создаю для него другую поверхность. В его подкласс ClassChart (Chart) я помещаю UITextEntryLine.
Проблема в том, что при использовании нового менеджера (относительно его поверхности) эта строка ввода не работает. Если я использую менеджер из основного класса (где я создаю окно), все работает. Так как же заставить мою строку входа работать с новым менеджером и стоит ли это того? Можно ли использовать один и тот же менеджер для всего проекта?
Мой основной:
FPS = 60
windowWidth = 900
windowHeight = 900
clock = pygame.time.Clock()
pygame.init()
windowSurface = pygame.display.set_mode((windowWidth, windowHeight))
manager = gui.UIManager((windowWidth, windowHeight))
background = pygame.Surface((windowWidth, windowHeight))
background.fill(Colors.WHITE)
chart = ClassChart(windowSurface, manager, x=100, y=100, name="TEst")
running = True
while running:
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
manager.process_events(event)
windowSurface.blit(background, (0, 0))
chart.draw()
manager.update(FPS)
manager.draw_ui(windowSurface)
pygame.display.update()
clock.tick(FPS)
Мой ClassChart (закомментированная строка показывает, как работать с менеджером из главная)
class ClassChart(Chart):
def __init__(self,
parentSurface,
manager,
width=160,
height=200,
boundColor=Colors.BLACK,
x=0, y=0, thickness=2,
name="Class",
backgroundColor=Colors.LIGHT_LIGHT_GREY, ):
super().__init__(parentSurface, width, height, boundColor, x, y, thickness)
self.manager = gui.UIManager((self.width, self.height))
self.name = gui.elements.UITextEntryLine(pygame.Rect((0, 0), (self.width, self.height)), self.manager)
# self.name = gui.elements.UITextEntryLine(pygame.Rect((self.x, self.y), (self.width, self.height)), manager)
self.nameSize = self.height // 10
self.fieldSize = (self.height - self.nameSize) // 2
self.name.set_text(name)
def draw(self):
super(ClassChart, self).draw()
pygame.draw.line(self.surface, self.boundColor, (0, self.nameSize),
(self.width, self.nameSize), self.thickness)
pygame.draw.line(self.surface, self.boundColor, (0, self.nameSize + self.fieldSize),
(self.width, self.nameSize + self.fieldSize), self.thickness)
self.manager.update(60)
self.manager.draw_ui(self.surface)
self.blit()