繁体   English   中英

如何在 python 制作的记事本上打开文本文件?

[英]How can i open a text file on a Notepad made in python?

我正在尝试添加一个 function,它允许我在 python 内置的记事本上打开一个文本文件,但此错误显示 TypeError: expected str, bytes or os.PathLike ZA8CFDE6331BD59EB2AC96F8911C4B

我实际上是编程新手,我正在关注如何在 python 上制作记事本的本教程,我尝试过导入操作系统,但我不知道如何使用它。 提前致谢

from tkinter import Tk, scrolledtext, Menu, filedialog, END, messagebox
from tkinter.scrolledtext import ScrolledText
from tkinter import*

#Root main window
root = Tk(className=" Text Editor")
textarea = ScrolledText(root, width=80, height=100)
textarea.pack()

# Menu options
menu = Menu(root)
root.config(menu=menu)
filename = Menu(menu)
edicion = Menu(menu)


# Funciones File

def open_file ():
    file = filedialog.askopenfiles(parent=root, mode='r+', title="Select a file")
    if file == None:
        contenidos = file.read()
        textarea.insert('1.0', contenidos)
        file.close
    else:
        root.title(" - Notepad")
        textarea.delete(1.0,END)
        file = open(file,"r+")
        textarea.insert(1.0,file.read)
        file.close()
def savefile ():
    file = filedialog.asksaveasfile(mode='w')
    if file!= None:
        data = textarea.get('1.0',END+'-1c')
        file.write(data)
        file.close()

def exit():
    if messagebox.askyesno ("Exit", "Seguro?"):
        root.destroy()

def nuevo():
    if messagebox.askyesno("Nuevo","Seguro?"):
        file= root.title("Vistima")
        file = None
        textarea.delete(1.0,END)

#Funciones editar

def copiar():
    textarea.event_generate("<<Copy>>")

def cortar():
    textarea.event_generate("<<Cut>>")

def pegar():
    textarea.event_generate("<<Paste>>")

#Menu


menu.add_cascade(label="File", menu=filename)
filename.add_command(label="New", command = nuevo)
filename.add_command(label="Open", command= open_file)

filename.add_command(label="Save", command=savefile)
filename.add_separator()
filename.add_command(label="Exit", command=exit)
menu.add_cascade(label="Editar", menu=edicion)
edicion.add_command(label="Cortar", command=cortar)
edicion.add_command(label="Pegar", command=pegar)
edicion.add_command(label="Copiar", command=copiar)
textarea.pack()

#Keep running
root.mainloop()


Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\57314\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/57314/PycharmProjects/text_editor/bucky.py", line 28, in open_file
    file = open(file,"r+")
TypeError: expected str, bytes or os.PathLike object, not list

该错误为您提供了正在发生的事情的提示。

您收到此错误: TypeError: expected str, bytes or os.PathLike object, not list

这表明这一行:

file = open(file,"r+")

正在尝试打开一个列表。 为什么会这样? 那么,你在这里用来分配file变量的函数是返回一个文件列表而不是一个文件名:

file = filedialog.askopenfiles(parent=root, mode='r+', title="Select a file")

有没有机会你误读了教程,你应该写:

file = filedialog.askopenfilename(parent=root, mode='r+', title="Select a file")

在这里查看两个函数之间的细微差别: http//epydoc.sourceforge.net/stdlib/tkFileDialog-module.html#askopenfiles

我制作了一个没有 GUI 的类似应用程序,但它的核心是相同的。 我没有在 tkinter 中输入文字,而是在控制台中使用标准输入 function。 这是我的可读代码:

(看我的读取功能)

print('My NoteBook')
print('Note: Do not reuse file names for text will be overwritten.')
import sys
import replit 
exit=0
while exit!='y':
  m=input('Select an option: a)read your docs or b)write a doc or c)delete a doc ')
  def writes(): 
    title=input('Enter the title of this paper: ')
    textstuff = input('Write something: ')
    text_file = open(title,'w')
    text_file.write(textstuff)
    text_file.close()
  def read():
    inputFileName = input("Enter name of paper: ")
    inputFile = open(inputFileName, "r")
    for line in inputFile:
      sys.stdout.write(line)
  def delete():
    import os

    print("Enter the Name of Paper: ")
    filename = input()
  
    os.remove(filename)
    print("\nPaper deleted successfully!")
  
    

    
  


  if m=='a':
    read()
  elif m=="b":
    writes()
  else:
    delete()

  
  exit=input('\nDo you want to exit, y/n ')
replit.clear() 
sys.exit('Thank you' )

我用 tkinter 做了一个文本编辑器的例子。
你可以看读function。
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from tkinter import filedialog
import os


# Creating the window
window = Tk()
window.title("Notepad")
window.geometry("500x500")

# Creating Text area
text_changed = False
text_area = Text(window, font="Calibri 15", wrap=None, undo=True)
text_area.pack(expand=True, fill=BOTH)
file = None
text_area.focus_force()

# Creating Functions for File menu
def new():
    global text_changed
    if text_changed == False:
        text = text_area.get(1.0, END)
        text_area.delete(1.0, END)
        window.title("Untitled - Notepad")
    else:
        save_the_file = messagebox.askyesnocancel(
            "Notepad", "Do you want to save the changes to Untitled?"
        )
        if save_the_file == True:
            file = filedialog.askopenfilename(
                initialfile="Untitled.txt",
                defaultextension=".txt",
                filetypes=[("Text Documents", ".txt"), ("All Types", "*.*")],
            )
            f = open(file, "w")
            f.write(text_area.get(1.0, END))
            f.close()
            text_area.delete(1.0, END)
            text_area.edit_modified(False)

        elif save_the_file == False:
            text = text_area.get(1.0, END)
            text_area.delte(1.0, END)
            window.title("Untitled - Notepad")
            text_changed = False
            text_area.edit_modified(False)
        else:
            pass


def open():
    try:
        global file, text_changed
        file = filedialog.askopenfilename(
            defaultextension=".txt",
            filetypes=[("Text Documents", ".txt"), ("All Types", "*.*")],
        )
        if file == "":
            file = None
        else:
            window.title(os.path.basename(file) + " - Notepad")
            changed_title = False
            text_area.delete(1.0, END)
            f = open(file, "r")
            text_area.insert(1.0, f.read())
            text_changed = False

    except:
        messagebox.showerror("Error", "Can't open the file!")
        window.title("Untitled - Notepad")


def save():
    global file
    if file == None:
        file = filedialog.asksaveasfilename(
            initialfile="Untitled.txt",
            defaultextension=".txt",
            filetypes=[("All Files", "*.*"), ("Text Documents", ".txt")],
        )
        if file == "":
            file = None
        else:
            f = open(file, "w")
            f.write(text_area.get(1.0, END))
            f.close()

            window.title(os.path.basename(file) + " - Notepad")
    else:
        f = open(file, "w")
        f.write(text_area.get(1.0, END))
        f.close()
        window.title(os.path.basename(file + " - Notepad"))


def save_as():
    global file
    file = filedialog.asksaveasfilename(
        initialfile="Untitled.txt",
        defaultextension=".txt",
        filetypes=[("Text Documents", "*.txt"), ("All Types", "*.*")],
    )
    if file != "":
        f = open(file, "w")
        f.write(text_area.get(1.0, END))
        f.close()


def exit():
    global file
    if file:
        window.wm_protocol("WM_DELTE_WINDOW", exit)
        msg = messagebox.askyesnocancel(
            "Warning", "Do you want to save the changes to Untitled?"
        )
        if msg == True:
            ask_user = filedialog.asksaveasfilename(
                defaultextension=".txt",
                filetype=[("Text Documents", "*.txt"), ("All Types", "*.*")],
            )
            if ask_user == "":
                window.quit()
            else:
                window.title(os.path.basename(ask_user))
                f = open(ask_user, "w")
                f.write(text_area.get(1.0, END))
                f.close()
                window.quit()
        elif msg == False:
            window.quit()
    else:
        window.quit()


# Creating functions for Edit menu
def cut():
    text_area.event_generate(("<<Cut>>"))


def copy():
    text_area.event_generate(("<<Copy>>"))


def paste():
    text_area.event_generate(("<<Paste>>"))


def delete():
    text_area.delete(0.0, END)


def undo():
    text_area.edit_undo()


def redo():
    text_area.edit_redo()


def select_all():
    text_area.tag_add("sel", "1.0", "end")


# Creating functions for Help menu
def help():
    messagebox.showinfo("info", "This is an example of Notepad.")


# Creating the Menu
menu = Menu(window)

# Adding File nenu and commands
file = Menu(menu, tearoff=0, font=("Calibri", 12))
menu.add_cascade(label="File", menu=file)
file.add_command(label="New", command=new)
file.add_command(label="Open", command=open)
file.add_command(label="Save", command=save)
file.add_command(label="Save As", command=save_as)
file.add_separator()
file.add_command(labe="Exit", command=exit)

# Ading Edit menu and comands
edit = Menu(menu, tearoff=0, font=("Calibri", 12))
menu.add_cascade(label="Edit", menu=edit)
edit.add_command(label="Cut", command=cut)
edit.add_command(label="Copy", command=copy)
edit.add_command(label="Paste", command=paste)
edit.add_command(label="Delete", command=delete)
edit.add_separator()
edit.add_command(label="Undo", command=undo)
edit.add_command(label="Redo", command=redo)
edit.add_separator()
edit.add_command(label="Select all", command=select_all)

# Ading Help menu and comands
_help = Menu(menu, tearoff=0, font=("Calibri", 12))
menu.add_cascade(label="Help", menu=_help)
_help.add_command(label="About", command=help)

window.config(menu=menu)
window.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM