所以我目前正在做一个随机生成器项目,它读取excel文件并随机选择数据但是当我开发代码时,我收到以下错误:
line 19, in RandomG
L2 = Label(r2, text=edata).grid(row=3, column=1).grid(rowspawn=3, sticky=S)
NameError: name 'edata' is not defined
我被告知一次使用" global"所以变量适用于所有函数 但它仍然给我错误。
这是我的代码:
from tkinter import *
from tkinter import ttk
from tkinter.filedialog import askopenfilename
import xlrd
import random
import os
creds = 'Python file.txt' # This just sets the variable creds to 'tempfile.temp'
def RandomG():
global r2
r.destroy()
rootA.destroy()
r2 = Tk()
r2.title('Random Generator')
r2.geometry('350x300')
r2.resizable(False, False)
L1 = Label(r2, text='Welcome to My Random Generator!!').grid(row=1, column=1)
L2 = Label(r2, text= edata).grid(row=3, column=1).grid(rowspawn=3, sticky=S)
L2.config(width=200)
B1 = Button(r2, text="Browse", command=Directory)
B1.grid(rowspan=3, sticky=S)
B2 = Button(r2, text="Randomize", command=Generator)
B2.grid(rowspan=3, sticky=S)
r2.mainloop
def Directory():
global filename
filename = askopenfilename(filetypes=(("Excel Files", ".xlsx"),("All files","*.*")))
pathlabel = Label(r2)
pathlabel.config(text=(filename))
pathlabel.grid(columnspan=2)
pathlabel.pack()
def Generator():
global edata
global sheet
global workbook
with open(filename)as a:
filelocation = (filename)
workbook = xlrd.open_workbook(filelocation)
sheet = workbook.sheet_by_index(0)
for col in range(sheet.nrows):
edata = print[sheet.pop(sheet.random.cell.value(0, col))]
答案 0 :(得分:1)
这不是global
关键字的工作方式...... global
只是告诉你的函数在全局命名空间中查找变量(而不是你函数的本地命名空间)。
这样可行:
N = None
def f():
global N
print(N)
首先没有定义N
(或在函数中设置它),它不会。
这也有效:
def f():
global N
N = 5
print(N)
(它会将N
溢出到您的全局命名空间。)
在任何情况下:在尝试读取其值之前,您必须设置N
(或edata
)。
答案 1 :(得分:0)
这意味着edata
没有价值。它需要在调用之前定义。