2015-06-23 59 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