wanton 发表于 2020-4-7 15:28:39

求助tkinter中text的get方法

在用tkinter做小甲鱼视频35课的第二题时,比较text中内容是否较原文件中内容发生改变,如果没有发生改变,点“OK”按钮应该就什么事都不会发生,但是我每次点都跳转到发生改变的那里去了。。。。
按理来说text的get方法中有\n,文件的read方法也有\n,两者应该是一样的啊,不知道哪里出了问题。
C:\Users\Administrator\Desktop\1.png
import tkinter as tk
import tkinter.filedialog
import tkinter.scrolledtext
#创建主窗体
window = tk.Tk()
window.title("显示文件内容")
window.geometry("500x400")
#label和button的建立,并加入frame中
frm = tk.Frame(window)
frm.pack(fill = "x")
var = tk.StringVar()
l = tk.Label(frm, textvariable = var )
l.pack(side = "left", padx = 5, pady = 5)
def surf():
    file_name = tk.filedialog.askopenfilename()
    var.set("文件【%s】的内容如下:" % file_name)
    #将文件导入entry
    global f    #不设置全局变量后面没法引用
    f = open(file_name, "r+")
    for eachline in f.readlines():
      st.insert("insert", eachline)
b1 = tk.Button(frm, text = "浏览文件", command = surf)
b1.pack(side = "right", pady = 5, padx = 5)
#增强功能
def change():
    #此处需要去除get方法中自带的换行符吗?
    new_string = st.get(0.0, "end")
    if new_string != f.read():
      #设置子窗口
      window_child = tk.Toplevel(window)
      window_child.geometry("400x150")
      window_child.title("警告")
      l_child = tk.Label(window_child, text = "检测到文件内容发生改变,请选择以下操作:")
      l_child.pack(side = "top", padx =20, pady = 20)
      #安装三个并列的button
      def cover_save():
            f.seek(0)
            f.write(st.get(0.0, "end"))
            f.close()
            window_child.destroy()
      b_child1 = tk.Button(window_child, text = "覆盖保存", command = cover_save)
      b_child1.place(x = 50, y = 75)
      def not_save():
            f.close()
            window_child.destroy()
      b_child2 = tk.Button(window_child, text = "放弃保存", command = not_save)
      b_child2.place(x = 150, y = 75)
      def elsewhere_save():
            f_elsewhere_name = tk.filedialog.asksaveasfilename()
            f_elsewhere = open(f_elsewhere_name, "w")
            f_elsewhere.write(st.get(0.0, "end"))
            f_elsewhere.close()
            f.close()
      b_child3 = tk.Button(window_child, text = "另存为", command = elsewhere_save)
      b_child3.place(x = 250, y = 75)
b2 = tk.Button(frm, command = change, text = "OK")
b2.pack(side = "right", pady = 5, padx = 5)
#scrolledtext
st = tk.scrolledtext.ScrolledText(window, width = 45)
st.pack(pady = 10)
window.mainloop()

wanton 发表于 2020-4-7 15:29:42

不知道怎么发图片。。。小甲鱼的题目没传上来
页: [1]
查看完整版本: 求助tkinter中text的get方法