所以我正在为我正在研究的这个项目编写一个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)
(那些块不是代码,只是文本输出)
我真的很困惑。我的理解是,每次按下按钮,它都会覆盖文件,然后关闭它。
感谢您的帮助。
答案 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。