0

我正在编写这个可以打开文本文档的基本 Tk 程序,但我似乎可以让它工作

这是我的代码:

from Tkinter import *
from tkFileDialog import askopenfilename
def openfile():
   filename = askopenfilename(parent=root)
   f = open(filename)
   x = f.read()
   return x


root = Tk()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=openfile)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)


text = Text(root)
text.insert(INSERT,(x))

text.pack()

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

我试图输入x到我的 tk 窗口,但它说它没有定义,即使我返回 x

为什么这不可行,我确定它很容易,但我想不通!

4

2 回答 2

3

所以你在这里有两个相关的问题。

  1. x即使您尚未定义它,您也正在尝试使用它
  2. 在这种情况下返回任何东西openfile都不起作用,因为你不能将它设置为另一个变量(比如x

您可能想要做的是读取文件并将其插入到Text小部件中,所有这些都在同一个函数调用中。试试这样的,

from Tkinter import *
from tkFileDialog import askopenfilename

def openfile():
    filename = askopenfilename(parent=root)
    f = open(filename)
    x = f.read()
    text.insert(INSERT,(x,))

root = Tk()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=openfile)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)

text = Text(root)
text.pack()

root.config(menu=menubar)
root.mainloop()
于 2013-05-08T02:32:55.837 回答
1

当你从一个函数返回一个值时,你需要将它分配给一个像这样的变量(伪代码):

myVariable = openfile()

然后你可以在你的参数中使用这个变量:

text.insert(INSERT, (myVariable))

变量 x 在函数内定义,因此超出范围。

于 2013-05-08T02:15:42.317 回答