file.open,“w”没有覆盖Python中的文件tKinter按钮方法

时间:2015-06-23 19:55:27

标签: python tkinter

所以我正在为我正在研究的这个项目编写一个tKinter GUI,我遇到了一个按钮方法的问题。在此按钮的方法中,代码将坐标列表打印到文本文件中。它第一次工作得很好,但是如果我在关闭根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()

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

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)

(那些块不是代码,只是文本输出)

我真的很困惑。我的理解是,每次按下按钮,它都会覆盖文件,然后关闭它。

感谢您的帮助。

3 个答案:

答案 0 :(得分: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 = open(' gridCenters.txt' w'))gridCenters.txt每次都会被重写,但如果标志是' a'而不是' w'比结果只是在另一个下面添加一个。我希望这就是你想要的。

答案 1 :(得分: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()

这对我有用,每次都会覆盖文件,每次都会更新值。在你的程序的其他地方必须有一些东西。

答案 2 :(得分:0)

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

看起来您没有清除变量坐标。在添加到变量之前,您应该确保从一个干净的变量开始,以获取您要查找的数据。

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