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

时间:2017-03-16 21:54:37

标签: python python-3.x tkinter filedialog

我编写的程序只有一个浏览按钮来搜索文件,然后打开您选择的文件。我知道你可以使用' askopenfile'但我想首先获得名称,以便它可以显示在我的tkinter窗口的“输入”框中,然后用户按“使用此文件”#39;然后它会打开。

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窗口,你按下浏览,选择一个文本文件,将路径写入Entry,然后我想按B1并获取程序打开文件并打印内容,但它只是打印:

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

2 个答案:

答案 0 :(得分:2)

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

file_content = file.read()
print(file_content)

答案 1 :(得分:0)

我知道这是一个老问题,现在OP可能已经知道了 但是要补充一点,您不能在不声明全局变量的情况下将局部变量从一个类使用到另一类,因此即使您执行了Novels所说的并更改了“ go”类,您在打印文件时仍然会遇到问题。

您必须做的是在main()类内部,将E1变量声明为全局变量,并且(如果您将此代码用于其他用途)对其他人也是如此:

  

全局E1,L1,B1,B2

这应该在main()内部