我试图将文本从加载的文件转换为ktinker .text,这是我到目前为止的代码,一旦您使用filedialouge打开文件,我不太了解文件的去向
from tkinter import *
from tkinter import ttk
from tkinter import filedialog
import tkinter as tk
interface = tk.Tk()
interface.geometry("500x500")
interface.title("Text display")
def openfile():
return filedialog.askopenfilename()
button = ttk.Button(interface, text="Open text File", command=openfile) # <------
button.grid(column=1, row=1)
T = tk.Text(interface, height=2, width=30)
T.insert(tk.END, "text file contents here")
T.grid(column=1, row=2)
interface.mainloop()
答案 0 :(得分:1)
由您来做一些返回值为askopenfilename
的事情。从按钮回调中返回它是没有意义的,因为什么都看不到返回的值。
例如,您可以将其另存为程序其他部分使用的全局变量:
def openfile():
global current_file
current_file = filedialog.askopenfilename()
您可能要做的另一件事是实际上打开文件并将内容插入到文本小部件中:
def openfile():
global current_file
current_file = filedialog.askopenfilename()
if current_file:
with open(current_file, "r") as f:
data = f.read()
T.insert("end", data)
但是,如果要立即打开文件,则可能要考虑使用askopenfile
而不是askopenfilename
。前者打开文件并返回一个句柄,后者简单地返回文件名。
答案 1 :(得分:0)
按钮无法从函数返回值。您可能需要在openfile
内部做所有事情-打开文件,阅读并在Text
# from tkinter import * # not preferred
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
# --- functions ---
def openfile():
filename = filedialog.askopenfilename()
if filename:
data = open(filename).read()
text.delete('1.0', 'end') # see Bryan Oakley comment why it is better to use string instead of float (but in this situation float 1.0 would work as expected)
text.insert('end', data)
# --- main ---
interface = tk.Tk()
interface.geometry("500x500")
interface.title("Text display")
button = ttk.Button(interface, text="Open text File", command=openfile)
button.grid(column=1, row=1)
text = tk.Text(interface, height=2, width=30)
text.grid(column=1, row=2)
text.insert('end', "text file contents here")
interface.mainloop()