使用函数外部函数的变量

时间:2013-05-08 02:12:51

标签: python function text tkinter return

我正在编写这个基本的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

为什么这不起作用我确定它的东西很简单,但我无法弄明白!

2 个答案:

答案 0 :(得分:3)

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

  1. 您尝试使用x,即使您尚未定义
  2. openfile返回任何内容在这种情况下无效,因为您无法将其设置为另一个变量(例如x
  3. 您可能想要做的是读取文件并将其插入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()
    

答案 1 :(得分:1)

从函数返回值时,需要将其赋值给变量(伪代码):

myVariable = openfile()

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

text.insert(INSERT, (myVariable))

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