簡體   English   中英

Pyglet中的空窗口

[英]Empty Window in Pyglet

我遇到以下問題-第一次編譯此標簽時顯示正確,但是下次我只得到一個空的黑色窗口。

import pyglet
window = pyglet.window.Window()

label = pyglet.text.Label('Hello, world',
                          font_name='Times New Roman',
                          font_size=36,
                          x=window.width//2, y=window.height//2,
                          anchor_x='center', anchor_y='center')

@window.event
def on_draw():
    window.clear()
    label.draw()

pyglet.app.run()

我使用python 3.4,該如何解決? 謝謝!

該代碼實際上可以在使用Pyglet 1.2.2的Python 3.5.1上運行。
但是,嘗試添加手動幀緩沖區將導致黑色窗口。

import pyglet
window = pyglet.window.Window()

label = pyglet.text.Label('Hello, world',
                          font_name='Times New Roman',
                          font_size=36,
                          x=window.width//2, y=window.height//2,
                          anchor_x='center', anchor_y='center')

@window.event
def on_draw():
    window.clear()
    label.draw()
    window.flip()  # <-- New addition

pyglet.app.run()

我認為所有這些都歸結為圖形緩沖區中的計時問題,在您看到再次開始清除文本之前,事情可能會進行更新。

因此,為了避免這種情況,我將粘貼一個最小的示例,說明如何繼承自定義類中的pyglet窗口類,在該類中您可以調用事件並自己重新繪制。

import pyglet

class base(pyglet.window.Window):
    def __init__(self):
        super(base, self).__init__(600, 600, fullscreen = False)

        self.alive = 1
        self.label = pyglet.text.Label('Hello, world',
                          font_name='Times New Roman',
                          font_size=36,
                          x=self.width//2, y=self.height//2,
                          anchor_x='center', anchor_y='center')
    def on_draw(self):
        self.render()

    def render(self):
        self.clear()
        self.label.draw()
        self.flip()

    def on_close(self):
        self.alive = 0

    def on_key_press(self, symbol, modifiers):
        if symbol == pyglet.window.key.ESCAPE: # [ESC]
            self.alive = 0

    def run(self):
        while self.alive == 1:
            self.render()

            # -----------> This is key <----------
            # This is what replaces pyglet.app.run()
            # but is required for the GUI to not freeze
            #
            event = self.dispatch_events()

x = base()
x.run()

此代碼也比使用裝飾器處理多個諧振的標准方法更有效,但是最重要的是,它似乎可以解決您發現的時序問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM