私は、Pygameで作成されたGUIを作成し編集するためのプログラムを開発しています。プログラム自体は素敵なGUIを持っていますので、私はその作成を簡単にするモジュールを作っています。今のところ他のものは私が期待どおりに動作しますが、私は解決できない問題を抱えています。どちらも理解できません。Pygameの表示を更新する際の問題
プログラムを起動すると黒いウィンドウが表示されます。問題は、ウィンドウが白で、画像がある黒い四角形を含むことです。私はそれをクリックして移動しようとしましたが、何も表示されませんでした。
最初に私はウィンドウを更新しなかったと思っていましたが、スクリプトをチェックして、私が行ったことを知りました。その後、私はウィンドウでさまざまなことを試し始め、実際の画面(モニタ)を終了するウィンドウの部分だけが更新され、ドラッグして画面に戻すと即座に更新されることがわかりました。
誰かが何が起こっているのか説明してもらえますか、なぜ起こっていますか、どのように修正できますか?
EDIT
私はそれを最小限にし、それを最大化した場合、ウィンドウにも正しく更新されていることが分かりました。だから問題はそれほど重要ではありませんが、それは非常に面倒です。ここで
はコードです:ここでは
import pygame
import time
def initialize():
global display
global screen
pygame.init()
display = pygame.display
screen = None
class Screen():
def __init__(self, size, color=[255, 255, 255]):
global screen
self.size = size
self.color = color
self.screen = display.set_mode(self.size)
self.fill(self.color)
self.update()
screen = self
def update(self, rectangle=None):
display.update(rectangle)
def fill(self, color, rectangle=None):
self.screen.fill(color, rectangle)
def draw(self, sprite):
self.screen.blit(sprite.image, sprite.rectangle[0])
class Engine():
def __init__(self):
self.events = []
self.running = False
def update_events(self):
self.events += pygame.event.get()
def get_events(self):
events = self.events
self.events = []
return events
def start(self, function=None, args=[], kwargs={}, frequency=21, function_first=False):
self.running = True
while self.running:
if function_first and function:
function(*args, **kwargs)
self.update_events()
if not function:
for event in self.events:
if event.type == pygame.QUIT:
self.running = False
pygame.quit()
break
if not function_first and function:
function(*args, **kwargs)
if self.running:
tick = 1.0/frequency
time.sleep(tick)
def stop(self):
self.running = False
class Sprite():
def __init__(self, rectangle, color=[0, 0, 0]):
self.rectangle = rectangle
self.color = color
self.image = None
def update(self):
global screen
screen.fill(self.color, self.rectangle)
screen.draw(self)
def load_image(self, image):
self.image = pygame.image.load(image).convert()
if __name__ == "__main__":
initialize()
s = Screen([500, 500])
e = Engine()
sprite = Sprite([[10, 10], [200, 200]])
sprite.load_image("test.png")
sprite.update()
s.update()
e.start()
はスクリーンショットです:私は、画面の外にウィンドウを引くと
:
を使用し、time.sleepを使用しないでください。私はループの表示を更新しませんが、前に更新します。そして私の経験から、私はそれもうまくいくはずであることを知っています。 pygame.event.get()を呼び出すと、私はします。私のコードを見ると、私はループを開始するengine.start()を呼び出すことがわかります。その中で私はself.update_events()を呼び出します。それにもかかわらず、私が得意とする行動は、これまでになかったような行動です。 – Cosinux
ウィンドウをドラッグできるようにするには、すべての反復で画面を更新する必要はありません。私はそれを周りにドラッグすることができる – Fredrik
。しかし、イメージは表示されません。そして、それはいつもしました。画面を常に更新するかどうかは関係ありません。 – Cosinux