我正在学习python作为一种消遣,并且在从函数访问数据("行")时遇到了一些麻烦。 我希望创建一个标签来显示函数后面的行数,但是我收到的错误是变量是"未定义"。 为什么会这样?
__author__ = 'alasdair'
from Tkinter import *
from tkMessageBox import *
import sys, Tkinter
from tkFileDialog import askopenfilename
Mainwindow = Tk()
Mainwindow.title ("Test")
Mainwindow.geometry('600x400')
global lines
def openfile():
name = askopenfilename(filetypes=(("TextDocument", "*.TXT;*.txt"),
("All files", "*.*") ))
with open(name) as foo:
lines = len(foo.readlines())
openfile = Button(Mainwindow,text = "Open File",width=20,command = openfile).place(x=25,y=45)
print(lines)
Mainwindow.mainloop()
答案 0 :(得分:0)
openfile()
变量仅在函数 - openfile
中定义,并且是它的局部变量,您不能在函数外部访问它(除非您在函数开头将其声明为全局变量)功能,虽然我不建议这样做。)
此外,text = "Open File"
是具有print(lines)
的Button的回调函数,并且在单击按钮的情况下不会调用该函数。
但是在创建Button之后立即执行print(lines)
,无法保证在到达print(lines)
之前点击该按钮。
您应该删除def openfile():
name = askopenfilename(filetypes=(("TextDocument", "*.TXT;*.txt"),
("All files", "*.*") ))
with open(name) as foo:
lines = len(foo.readlines()
print(lines)
行,并将其打印在函数 -
{{1}}
答案 1 :(得分:0)
您可以做的是从打开的文件中返回行,然后将其分配给如下变量:
def openfile():
name = askopenfilename(filetypes=(("TextDocument", "*.TXT;*.txt"),
("All files", "*.*") ))
with open(name) as foo:
lines = len(foo.readlines())
return lines
lines = openfile() # run before you tried to access the lines variable
您可能需要考虑的其他事项: