2013-05-23 5 views
0

Chaque fois que je clique sur le bouton de sauvegarde de mon application, un dialogue de sauvegarde fonctionne correctement et une fenêtre tkinter se bloque dès que je tente de la fermer . Voici mon code qui fait en quelque sorte la fenêtre au hasard:La fenêtre tk aléatoire s'ouvre lorsque j'essaie d'utiliser un dialogue de sauvegarde de tk dans pygame

import tkFileDialog,pygame 

pygame.init() 

screen = pygame.display.set_mode((640,360)) 

pygame.display.set_caption("Idea Processor") 

# code is cut here 

try: 
    ideasetupfonts = pygame.font.SysFont("Ubuntu", 36, False, False) 
except: 
    ideasetupfonts = pygame.font.SysFont("Arial", 36, False, False) 
# TextNameToBlit = ideasetupfonts.render(" TEXT HERE ",1,(0,0,0)) 

Potato = True 
ShowToolbar = True 
newSaveFile = {"Hello World":(50,50)} 



def SaveFile(): 
    filename = tkFileDialog.asksaveasfilename(**{"title":"Save Idea...","defaultextension":".txt","filetypes":[("text files", ".txt")],}) 
    if filename: 
     saveFile = open(filename, 'w') 
     print >>saveFile,newSaveFile 
     saveFile.close() 

while Potato: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      Potato = False 
    screen.fill(white) 

    # and here 

    mousex,mousey = pygame.mouse.get_pos() 

    # SaveFile button 
    if mousex>=0 and mousex<=32 and mousey>=0 and mousey<=32 and pygame.mouse.get_pressed() == (True, False, False) and ShowToolbar: 
     SaveFile() 


    # and here 

    pygame.display.flip() 

pygame.quit() 
+0

la seule fenêtre qui apparut quand je l'ai couru était une fenêtre pygame – Serial

Répondre

3

Cette fenêtre est l'élément par défaut Tk qui est créé quand un widget Tkinter est créé si vous ne l'avez pas créé un précédent. Cela arrive parce que tkFileDialog est construit sur Tkinter. Je vous suggère de créer cet élément vous-même et de le masquer en appelant sa méthode withdraw.

import Tkinter, tkFileDialog, pygame 

root = Tkinter.Tk() 
root.withdraw() 

Comme une note de côté, j'ai vu que vous avez nommé le drapeau pour votre boucle pygame Potato. Je ne sais pas comment cela pourrait être lié à l'utilisation réelle de cette variable, mais je vous recommande fortement d'utiliser des noms significatifs pour vos classes, variables et modules. Ici, c'est an article from Object Mentor (qui fait partie de l'excellent livre "Clean Code") exclusivement sur le nommage, j'espère que vous le trouverez utile.

+1

Désolé, j'ai une étrange habitude de nommer des variables importantes "Potato". : P Je vais le changer bientôt. – V360

+1

@ V360 "_J'ai une étrange habitude de nommer des variables importantes" Potato "_" Je voudrais pouvoir marquer des commentaires comme celui-ci comme favoris :) –