当用户按下取消时,tkColorChooser.askcolor窗口不会关闭

时间:2012-02-12 03:07:27

标签: python tkinter pygame

我正在尝试使用pygame在python中创建一个简单的绘图程序。 我希望用户使用tkColorChooser.askcolor选择颜色。 用户按b时弹出对话框。当用户选择颜色时,它工作正常。但是如果用户在askcolor窗口中按下Cancel,程序将继续运行,但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()

1 个答案:

答案 0 :(得分:0)

您似乎做错了一件事是您没有通过调用root.mainloop()来启动事件循环。不管这是不是实际问题,我不知道。但是,如果没有事件循环运行,Tkinter就无法工作,所以你得到奇怪的行为并不奇怪。