它应该是pygame_gui中的一个UIManager吗?

2024-10-02 08:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用pygame-gui写一个项目。我需要一个类图表,它是一个将填充一些文本、图形等的框。因此我为它创建了一个不同的曲面。在它的子类ClassChart(Chart)中,我放置了一个uitextryline

问题是使用新的管理器(与其表面相关)此入口行不起作用。如果我使用主类(我创建窗口的地方)中的管理器,一切都会正常工作。那么,如何让我的入职线与新经理一起工作,这值得吗?在整个项目中使用同一个经理可以吗

我的主要意见是:

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)

我的课程图表 (注释行显示如何从main与经理一起工作)

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()

Tags: nameselfeventmanagerguiwidthpygameheight

热门问题