Python Tkinter - AttributeError: у объекта 'str' нет атрибута 'read' - PullRequest
1 голос
/ 30 марта 2019

Когда я открываю файл, я получаю вышеупомянутый код ошибки «AttributeError: у объекта 'str' нет атрибута 'read'"

Есть идеи, как это исправить? Заранее благодарен за любую помощь

Вот мой код ниже:

import tkinter.scrolledtext as ScrolledText
from tkinter import *

root = Tk()
root.title("Diary")
root.minsize(width=400, height=400)
root.maxsize(width=800, height=480)

text= ScrolledText.ScrolledText (root, width=400, height=400)
text.pack()

def donothing():
   x = 0

def newFile():
    global filename
    filename = "Untitled"
    text.delete(0.0, END)

def openFile():
    rootFilename =  filedialog.askopenfilename(initialdir = "E:/Images",title = "choose your file",filetypes = (("Text file","*.txt"),("all files","*.*")))

    if rootFilename != None:
       contents= rootFilename.read()
       TextArea.insert('1.0', contents)
       file.close()

def saveFile():
    name = filedialog.asksaveasfile(mode = 'w',filetypes = (("Text file","*.txt"),("all files","*.*")))
    text2save = str(text.get(0.0,END))
    name.write(text2save)
    name.close

def Exit():
        root.destroy()

menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="New", command=newFile)
filemenu.add_command(label="Open", command=openFile)
filemenu.add_command(label="Save", command=saveFile)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=Exit)
menubar.add_cascade(label="File", menu=filemenu)

root.config(menu=menubar)
root.mainloop()

1 Ответ

1 голос
/ 30 марта 2019

Вам нужно открыть файл самостоятельно из возвращаемой строки askopenfilename.

def openFile():
    rootFilename =  filedialog.askopenfilename(initialdir = "E:/Images",title = "choose your file",filetypes = (("Text file","*.txt"),("all files","*.*")))

    if rootFilename:
        with open(rootFilename,"r") as f:
            f = f.read()
            text.insert('1.0', f)

. Или вместо этого вы можете получить askopenfile:

def openFile():
    rootFilename = filedialog.askopenfile(initialdir="E:/Images", title="choose your file",
                                              filetypes=(("Text file", "*.txt"), ("all files", "*.*")))

    if rootFilename:
        rootFilename = rootFilename.read()
        text.insert('1.0', rootFilename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...