尝试使用pygame中的tk保存对话框时,随机tk窗口打开

时间:2013-05-23 02:04:22

标签: python tkinter pygame

每当我点击我的应用程序上的保存按钮时,它会打开一个正常工作的保存对话框,并在我尝试关闭它时立即崩溃的tkinter窗口。这是我的代码以某种方式使随机窗口:

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()

1 个答案:

答案 0 :(得分:3)

该窗口是创建Tkinter小部件时创建的默认Tk元素,如果您尚未创建前一个小部件。发生这种情况是因为tkFileDialog建立在Tkinter之上。我建议你自己创建该元素,并通过调用withdraw方法隐藏它。

import Tkinter, tkFileDialog, pygame

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

作为旁注,我看到你为Pygame循环命名了标志Potato。我不知道它是如何与这个变量的实际使用相关联的,但我强烈建议你使用有意义的名称作为你的类,变量和模块。这里是an article from Object Mentor(这是优秀书籍“清洁代码”的一部分)专门用于命名,我希望你发现它很有用。