本帖最后由 laurence5181 于 2018-2-26 20:19 编辑
- import easygui as g
- import sys
- import os
- file_path = g.fileopenbox()
- old_file = open(file_path)
- msg = '文件的内容如下:'
- title = '显示文件内容'
- text = old_file.read()
- change_file = g.textbox(msg, title ,text)
- old_file.close()
- if text != change_file: #比較的是文檔"內容(text)" 而不是old_file
- save = g.buttonbox(msg='检测到文件内容发生改变,请选择以下操作:',title='警告',choices=('覆盖保存','放弃保存','另存为'))
- if save == '覆盖保存':
- f = open(file_path,'w')
- f.write(change_file)
- f.close()
- elif save =='放弃保存':
- pass
- elif save =='另存为':
- file_save_path = g,filesavebox()
- os.mkdir(file_save_path)
- f = open(file_save_path,'w')
- f.write(change_file)
- f.close()
复制代码
1.比較對像錯誤
不管怎樣一定都會進入if判斷 因為程式是由上往下一行一行執行的 (可以去溫習小甲魚007~009 了不起的分支與循環)
我猜你的疑問應該是為什麼沒修改內容還是會跳出詢問儲存框
因為你原本比較的是file對像(open()把文件變為對像)跟textbox回傳的文件內容字符串
所以不管怎麼比較一定都會進入if的循環(因為不等於)
只要把if old_file 改成 text就能正確執行了!
2.注意參數位置
change_file = g.textbox(msg,title ,text)
這邊你原本是用關鍵字參數的形式,我把他改成這樣是因為這邊有個需要注意的地方
參數的順序 位置參數>關鍵字參數>默認參數
假如我改成change_file = g.textbox(msg,title = '显示文件内容', text)
他會報錯"positional argument follows keyword argument"
因為關鍵字參數後面不能有位置參數!
3.局部參數問題
change_file = g.textbox(msg,title = '显示文件内容', text = (old_file.read()))
text這樣屬於textbox的局部參數(不能被外面所調用)
這樣執行的話 if判斷那邊會報錯NameError: name 'text' is not defined
基本上會遇到這三個問題點(我自己實作的時候也是)
希望有幫助到您理解 若講解有誤也請其他大大指正