2012-02-12 12 views
0

pygameを使用して単純な描画プログラムをPythonで作成しようとしています。 tkColorChooser.askcolorを使用して、ユーザーが色を選択するようにします。 ユーザがbを押すとダイアログがポップアップします。ユーザーが色を選択するとうまく動作します。しかし、ユーザーが[askcolor]ウィンドウで[キャンセル]を押すと、プログラムは実行されますが、[askcolor]ウィンドウは閉じません。 [キャンセル]ボタンを押したまま、他のウィンドウの上に開いたままです。ユーザーがキャンセルを押したときにtkColorChooser.askcolorウィンドウが閉じない

私は間違っていますか?

問題が発生した場所で簡単なコードを投稿しています。 Linux Ubuntu 11.10、Python 2.7.2以降、python-pygame 1.9.1リリース-0ubuntu4

ありがとうございました!あなたは間違ってやっているように見える

#! /usr/bin/env python 
import pygame 
from Tkinter import * 
import tkColorChooser 

def main(): 
    # Colors 
    black = (0,0,0) 
    yellow = (252, 229, 3) 
    bgcolor = black 
    picturecolor = yellow 

    running = 1 

    # Initiate the screen 
    screen = pygame.display.set_mode((0, 0), pygame.RESIZABLE) 
    screen.fill(bgcolor) 
    pygame.draw.circle(screen, picturecolor, (200,200), 10, 0) 
    pygame.display.flip() 

    # Initiates the Tk 
    root = Tk() 
    root.withdraw()  

    while running: 
     event = pygame.event.poll() 
     if event.type == pygame.KEYUP: 
     if event.key == pygame.K_b: 
      ctuple,cstr = tkColorChooser.askcolor(initialcolor=bgcolor, title = 'Choose picture color') 
      if ctuple != None: 
       picturecolor = ctuple 
       screen.fill(bgcolor) 
       pygame.draw.circle(screen, picturecolor, (200,200), 10, 0) 
       pygame.display.flip() 
     if event.key == pygame.K_x: 
      running = 0 
     if event.type == pygame.QUIT: 
     running = 0 

if __name__=="__main__": 
    main() 
+0

tkColorChooser(py3k colochooser)は、py3.2でwin7で完璧に動作しています。投稿コード – joaquin

答えて

0

ことの一つは、あなたがroot.mainloop()を呼び出すことにより、イベントループを開始していないということです。それが実際の問題であろうとなかろうと、私は知らない。しかし、Tkinterはイベントループが実行されていないと動作しないように設計されているので、奇妙な動作をしているのは驚くことではありません。

+0

ありがとうございました!はい、私はpygameとtkinterを組み合わせることはそれほど簡単ではありません。私はpygameが私が必要とするものではないと思う、私はTKのキャンバスにしようとするだろう。 – Santiago

+0

@サンティアゴ:あなたのコードは、それぞれPython 3.2(名前の変更)とPython 2.6.6(変更なし)のWindows XPとwin7 64ビットで動作します... ubuntuでも試しませんでした – joaquin

関連する問題