Окно tkColorChooser.askcolor не закрывается, когда пользователь нажимает Отмена - PullRequest
0 голосов
/ 12 февраля 2012

Я пытаюсь сделать простую программу для рисования на 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 голосов
/ 12 февраля 2012

Одна вещь, которую вы, кажется, делаете неправильно, это то, что вы не запускаете цикл обработки событий, вызывая root.mainloop(). Является ли это реальной проблемой или нет, я не знаю. Однако Tkinter не предназначен для работы без цикла обработки событий, поэтому неудивительно, что вы получаете странное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...