file.open使用“打开”;w";在Python tKinter按钮方法中不覆盖文件

file.open使用“打开”;w";在Python tKinter按钮方法中不覆盖文件,python,tkinter,Python,Tkinter,所以我正在为这个项目编写一个tKinter GUI,我的一个按钮方法遇到了问题。在该按钮的方法中,代码将坐标列表打印到文本文件中。第一次它工作得很好,但是如果我在关闭根tKinter窗口之前再次按下按钮,它不会截断文件-它只是在末尾添加下一个偏移坐标。这是我的密码: #print to file reportFile = open('gridCenters.txt','w') reportFile.write('In movement order:\n') for x in xrange(0,l

所以我正在为这个项目编写一个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()
现在,这是一个按钮方法,所以据我所知,它应该在每次按下按钮时执行。真正奇怪的是,在再次按下按钮后的输出中,它只打印循环值。出于某种原因,它跳过了“按移动顺序”部分。 它不允许我上传图像,但我想了解一下它的外观:

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)
(这些块不是代码,只是文本输出)

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


谢谢你的帮助。

我不是舒尔,为什么它不适合你,但以下是我写的

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”,则结果只是在另一个标志下追加一个。我希望这是你想要的。

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

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()
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()
在wtf函数中,如果“w”是标志(reportFile=open('gridCenters.txt','w')),gridCenters.txt每次都会被重写,但如果标志是“a”而不是“w”,则结果只是在另一个标志下追加一个。我希望这是您想要的

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()
这对我来说很有效,每次都会覆盖文件,并且每次都会更新值。您的程序中的其他地方一定发生了一些事情


这对我来说很有效,每次都会覆盖文件,并且每次都会更新值。程序中的其他地方一定有问题。

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

看起来您没有清除变量坐标。在添加变量以获取所需数据之前,应确保从干净的变量开始


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

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

看起来您没有清除变量坐标。在添加变量以获取所需数据之前,应确保从干净的变量开始



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

您的意思是什么
它跳过了“按移动顺序”部分
?我们可以在您的示例中看到移动顺序:字符串。请创建一个最小的完整示例。您的代码看起来很好,因此问题肯定比您意识到的更多。谢谢你的帮助,我意识到了我的错误。它在坐标列表中添加了新信息。它跳过“按移动顺序”部分是什么意思?我们可以在您的示例中看到移动顺序:字符串。请创建一个最小的完整示例。您的代码看起来很好,因此问题肯定比您意识到的更多。谢谢你的帮助,我意识到了我的错误。这是在坐标列表中添加新信息。这是因为“a”代表“append”,它只会将文本添加到文件的底部,据我所知,这不是他想要的。是的,我知道“a”代表append,如果你看我的代码,你会看到有“w”而不是“a”。我只是想给他解释一下。这似乎与问题无关。但我怀疑他的错误发生在其他地方。也许这与你无关,但可能与他无关。那是因为“a”代表“append”,它只会将文本添加到文件底部,据我理解,这不是他想要的。是的,我知道“a”代表append,如果你看我的代码,你会发现有“w”而不是“a”。我只是想给他解释一下。这似乎与问题无关。我怀疑他的错误发生在其他地方。也许这与你无关,但可能与他无关。那就可以了!很高兴你找到了问题的原因;我想不到那是你的问题。那就够了!很高兴你找到了问题的原因;我没想到这是你的问题。谢谢!我意识到,在再次按下按钮之前,我并没有清除坐标列表-它只是在末尾附加下一个值。这是一个相当愚蠢的错误,但看起来令人困惑。这是一个很容易犯的错误,很高兴能帮上忙。谢谢!我意识到,在再次按下按钮之前,我并没有清除坐标列表-它只是在末尾附加下一个值。这是一个相当愚蠢的错误,但看起来令人困惑。这是一个容易犯的错误,很乐意帮助。