2012-02-12 32 views
0

我想在python中使用pygame做一個簡單的繪圖程序。 我希望用戶使用tkColorChooser.askcolor選擇一種顏色。 用戶按下b時彈出對話框。當用戶選擇一種顏色時它工作正常。但是,如果用戶在askcolor窗口中按下Cancel按鈕,程序將繼續運行,但askcolor窗口不會關閉。 它保持打開在另一個窗口頂部,並按下取消按鈕。tkColorChooser.askcolor窗口不關閉,當用戶按下取消

我在做什麼錯?

我發佈了一個簡化的代碼,其中出現問題。 我在Linux下運行它Ubuntu 11.10,Python 2.7.2+,python-pygame 1.9.1release-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)在win7中使用py3.2完美工作。取消按預期使用發佈的代碼 – joaquin 2012-02-12 09:15:22

回答

0

你似乎做錯了的一件事是,你不是通過調用root.mainloop()啓動事件循環。不管這是否是實際問題,我都不知道。然而,Tkinter的設計並不是在沒有運行事件循環的情況下工作的,所以你會得到奇怪的行爲並不奇怪。

+0

謝謝!是的,我發現將pygame和tkinter結合起來並不容易。我猜pygame不是我需要的,我會嘗試TK畫布。 – Santiago 2012-02-13 21:48:32

+0

@Santiago:你的代碼適用於python 3.2(適應名稱)和python 2.6.6(未修改),分別適用於windows XP和win7 64位......雖然沒有在ubuntu上試用 – joaquin 2012-02-14 20:12:43

相關問題