tkColorChooser.askcolor窗口在用户按取消时不关闭

0 投票
1 回答
1333 浏览
提问于 2025-04-17 12:52

我正在用Python和pygame制作一个简单的绘图程序。
我希望用户能选择颜色,使用tkColorChooser.askcolor这个工具。
当用户按下“b”键时,会弹出一个对话框。用户选择颜色时一切正常。但是如果用户在askcolor窗口中按下“取消”按钮,程序会继续运行,但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

你似乎有一个地方做错了,就是没有通过调用 root.mainloop() 来启动事件循环。不知道这是不是你遇到问题的真正原因。不过,Tkinter这个库是需要事件循环在运行的,如果没有启动这个循环,出现奇怪的行为也是很正常的。

撰写回答