通过调用两个函数 Pygame 实时更新文本

我有一个程序,它接受用户的输入并使用该Population()函数显示输入的多种变体。该store_fit函数将这些不同的变体添加到列表中,然后将它们删除,以便列表一次仅填充一个变体。


我希望能够从列表中获取变体并使用它来更新我的文本。Population但是,我的程序仅在功能完成后才更新文本。我怎样才能运行该Population功能并同时更新我的文本?


代码:


fit = []

...


def store_fit(fittest): # fittest is each variation from Population

    clear.fit()

    fit.append(fittest)

...


pg.init()

...

done = False


while not done:

...

    if event.key == pg.K_RETURN:

        print(text)

        target = text

        Population(1000) #1000 variations

        store_fit(value)

        # I want this to run at the same time as Population

        fittest = fit[0]

...

top_sentence = font.render(("test: " + fittest), 1, pg.Color('lightskyblue3'))

screen.blit(top_sentence, (400, 400))


达令说
浏览 83回答 1
1回答

智慧大石

我建议制作Population一个生成器功能。请参阅Python yield 关键字解释:def Populate(text, c):    for i in range(c):        # compute variation        # [...]        yield variation创建一个迭代器并用于next()检索循环中的下一个变体,因此您可以打印每个变体:populate_iter = Populate(text, 1000)final_variation = Nonewhile not done:    next_variation = next(populate_iter, None)    if next_variation :        final_variation = next_variation         # print current variation        # [...]    else:        done = True根据评论编辑:为了让我的问题简单,我没有提到Population, 是一个类 [...]当然Populate can be a class,也是。在这种情况下,您必须实现该object.__iter__(self)方法。例如:class Populate:    def __init__(self, text, c):        self.text = text        self.c    = c    def __iter__(self):        for i in range(self.c):            # compute variation            # [...]            yield variation通过创建一个迭代器iter()。例如:populate_iter = iter(Populate(text, 1000))final_variation = Nonewhile not done:    next_variation = next(populate_iter, None)    if next_variation :        final_variation = next_variation         # print current variation        # [...]    else:        done = True
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python