0

每当我单击我的应用程序上的保存按钮时,它都会打开一个正常工作的保存对话框和一个 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()
4

1 回答 1

3

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

import Tkinter, tkFileDialog, pygame

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

作为旁注,我看到您已经为 Pygame 循环命名了标志Potato。我不知道它与这个变量的实际使用有什么关系,但我强烈建议您为您的类、变量和模块使用有意义的名称。这是来自 Object Mentor 的一篇文章(它是优秀书籍“清洁代码”的一部分),专门关于命名,我希望你觉得它有用。

于 2013-05-23T02:18:05.667 回答