如何在使用 askopenfilename 获取位置后打印文本文件的内容

How to print contents of text file after using askopenfilename to get the location

我正在编写一个程序,它只有一个浏览按钮来搜索文件,然后打开您 select 的文件。我知道你可以使用 'askopenfile' 但我想先获取名称,以便它可以显示在我的 tkinter window 的输入框中,然后用户按 'Use this file' 然后它会打开.

from tkinter import *
from tkinter import ttk
from tkinter import filedialog

def main():
    self = Tk()

    F1 = LabelFrame(self, text="Select File")
    F1.grid(row=0, column=0, padx=3)

    browse = Button(F1, text="Browse...", command=openfile)
    browse.grid(row=0, column=2, padx=1, pady=3)

    E1 = Entry(F1, text="")
    E1.grid(row=0, column=1, sticky="ew")

    L1 = Label(F1, text="Filename:")
    L1.grid(row=0, column=0, padx=3)

    B1 = Button(F1, text="Use This File", command=go)
    B1.grid(row=1, column=2, padx=3, pady=3)

    B2 = Button(F1, text="Cancel", width=7)
    B2.grid(row=1, column=1, sticky="e")

    self.mainloop()

def openfile():
    global filename
    filename = filedialog.askopenfilename()
    E1.delete(0, END)
    E1.insert(0, filename)

def go():
    global filename
    file = open(filename)
    file.read()
    print(file)
    file.close()
main()

所以它做了一个tkinter window,你按浏览,select一个文本文件,路径写在Entry里,然后我想按B1让程序打开文件并打印内容,但它只打印:

<_io.TextIOWrapper name='C:/Users/Me/text.txt' mode='r' encoding='cp1252'>

您需要将 read() 的返回值保存到一个变量中并打印出来,而不是文件对象。

file_content = file.read()
print(file_content)

我知道这是一个老问题,现在 OP 可能已经解决了 但只是补充一点,你不能在不声明全局变量的情况下使用从一个 class 到另一个 class 的局部变量,所以即使你按照 Novel 所说的去做并更改 "go" class 你仍然会有打印文件时出现问题。

你必须做的是在 main() 中 class 将 E1 变量声明为全局变量,并且(如果你将此代码用于其他用途)也对其他人做同样的事情:

global E1, L1, B1, B2

这应该在 main() 中