2015-06-23 34 views
1

所以我正在为我正在编写的这个项目编写一个tKinter GUI,并且我遇到了一个按钮方法问题。在这个按钮的方法中,代码打印一个文本文件的坐标列表。它第一次效果很好,但如果在关闭根tKinter窗口之前再次按下按钮,它不会截断文件 - 它只是将下一个起始坐标添加到最后。这里是我的代码:file.open用“w”不覆盖Python中的文件tKinter按钮方法

#print to file 
reportFile = open('gridCenters.txt','w') 
reportFile.write('In movement order:\n') 
for x in xrange(0,len(coordinates)): 
    reportFile.write('%s\n' % str(coordinates[x])) 
reportFile.close() 

现在,这是一个按钮的方法中,所以我的理解,应该执行每次按下按钮时。真奇怪的部分是,在再次按下按钮后的输出中,它只打印循环值。出于某种原因,它跳过了“在运动顺序”部分。 它不会让我上传图片,但这里是它的外观一个想法:如果我再次按下按钮关闭根窗口前

In movement order: 
(0,1) 
(0,2.5) 
(0.3.5) 
(0,4.5) 

然后:

In movement order: 
(0,1) 
(0,2.5) 
(0.3.5) 
(0,4.5) 
(0,1) 
(0,2.5) 
(0.3.5) 
(0,4.5) 

(这些区块麦凯纳t代码,只是文本输出)

我只是非常困惑。我的理解是,每次按下按钮时,都应该覆盖文件,然后关闭它。

感谢您的帮助。

+1

你是什么意思'它跳过了“在运动顺序”部分?我们可以在您的示例中看到_In移动顺序:_字符串。 – boardrider

+0

请创建一个最小的完整示例。你的代码看起来很好,所以必须有更多的问题比你意识到的要多。请参阅http://stackoverflow.com/help/mcve –

+0

感谢您的帮助,我意识到我的错误。它将新的信息附加到坐标列表中。 – plus1etal

回答

0

在您的按钮重新打开文件时,它不会再次打印“移动顺序:”。

这看起来像你没有清除你的变量坐标。在添加它以获取要查找的数据之前,应该确保您使用干净的变量。

您可以在文件关闭后重置它,除非您需要保留该文件以便在该点使用GUI。

+0

谢谢!我意识到在再次按下按钮之前我没有清除坐标列表 - 它只是在最后附加下一个值。相当愚蠢的错误,但它看起来莫名其妙。 – plus1etal

+0

这是一个容易犯的错误,很乐意提供帮助。 – trapspring

0

我不舒服为什么它不适合你,但这是我写的。

from Tkinter import * 

def wtf(coordinates): 
    reportFile = open('gridCenters.txt','w') 
    reportFile.write('In movement order:\n') 
    for x in xrange(0,len(coordinates)): 
     reportFile.write('%s\n' % str(coordinates[x])) 
    reportFile.close() 

def main(): 
    coordinates = [(0,1),(0,2.5),(0,3.5),(0,4.5)] 
    root = Tk() 
    btn = Button(root,text='click me',command = lambda:wtf(coordinates)) 
    btn.pack() 

    root.mainloop() 
main() 
在WTF功能

如果 'W' 是标志(reportFile =开放( 'gridCenters.txt', 'W'))的gridCenters.txt改写每时间,但如果该标志为 'a',而不是'w'比结果只是附加在一个下面。我希望这是你想要的。

+0

这是因为'a'是'append',它只是简单地将文本添加到文件的底部,而根据我的理解,这不是他想要的。 – maccartm

+0

是的,我知道'a'是要追加的,如果你看我的代码,你会看到'w'而不是'a'。我只是想解释他。 –

+0

这似乎与这个问题无关。不过,我怀疑他的错误在别处发生。 – maccartm

0
from Tkinter import * 
coords = [1, 2, 3, 4, 5] 
def write(): 
    global coords 
    fileName = "testButton.txt" 
    fileObj = open(fileName, 'w') 
    fileObj.write("Some words\n") 
    for i in xrange(0, len(coords)): 
     fileObj.write("%d\n" %coords[i]) 
    fileObj.close() 
    for i in range(5): 
     coords[i] += 1 

root = Tk() 
f = Frame(root).pack() 
b = Button(root, text = "OK", command = write).pack(side = LEFT) 

root.mainloop() 

这对我有用,每次覆盖文件,每次都更新值。你的程序中的其他地方一定会发生。

+0

这会做到!很高兴你知道是什么导致了这个问题;我不会猜到这是你的问题。 – maccartm