背景として、私はDebian Lennyを実行しており、GNOMEとFluxboxの両方でこれを試しました。
とにかく、私はデスクトップで描画する方法を探していました、そして私はここでこのコードを見つけて試しました:http: //blog.prashanthellina.com/2007/08/24/drawing-on-your-desktop/
(コントロールCを押すことによって)終了すると、Xは新しいウィンドウを作成する機能を失うことを除いて、正常に機能しました。
おそらく問題はpygameがリソースを解放しないことだと思っていたので、killシグナルをトラップするコードのブロックを追加して、次のようにしました。
"""
Run the following command in the shell before executing this script
export SDL_WINDOWID=`xwininfo -root|grep "id:"|sed 's/^.*id: //'|sed 's/ (.*$//'`
"""
import pygame
import sys
import random
import time
import signal
pygame.init()
window = pygame.display.set_mode((1280, 1024))
screen = pygame.display.get_surface()
def handle_sigint(signum, frame):
"""I want to ensure resources are released before bailing."""
print("SIGINT received.");
pygame.display.quit()
pygame.quit()
sys.exit(0)
# Set handler to catch C^C Interupts
signal.signal(signal.SIGINT, handle_sigint)
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit(0)
x = random.choice(range(640))
y = random.choice(range(480))
radius = random.choice(range(100))
col_r = random.choice(range(255))
col_g = random.choice(range(255))
col_b = random.choice(range(255))
time.sleep(.03)
rect = pygame.draw.circle(screen, (col_r, col_g, col_b), (x,y), radius)
pygame.display.update(rect)
そして、もう一度やり直しました。割り込みハンドラーのprintステートメントは、終了時にハンドラーが実行されることを示していますが、それでも同じ問題が発生します。さらに興味深いことに、Xの実行中は問題はありません。それはそれを終了した後でのみです。
誰かが何が起こっているのか、そしてXセッションを壊さないようにコードを修正するために私ができることを知っている人はいますか?前もって感謝します。