首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Excelfile中读取后,如何链接OptionMenu?

从Excelfile中读取后,如何链接OptionMenu?
EN

Stack Overflow用户
提问于 2017-02-01 17:38:15
回答 1查看 59关注 0票数 0

我是Python的新手,我正在尝试构建一个可以打开和读取Excel文件的GUI。我已经有了单选按钮,每个链接到一个不同的文件夹。在此文件夹中,可以选择多个文件。然后出现两个OptionMenu,一个用于读取Excel的工作表,另一个用于读取excel的列。这就是我被卡住的地方。我似乎无法将这两个OptionMenu关联起来。这是我到目前为止的代码:

代码语言:javascript
复制
import tkinter
from tkinter import filedialog
global data, sheets, sheetsList

class filedialogexample(tkinter.Frame):
    def __init__(self, root):
        tkinter.Frame.__init__(self, root)
        self.favorite = tkinter.StringVar()        

        tkinter.Radiobutton(self, text = "Browse 1", variable = self.favorite, 
            command=self.askopenfilename, value="C:\\Users\\Documents\\Python Scripts"
            ).grid(row=0, column=0, columnspan=2, sticky='w')  

    def askopenfilename(self):       
        self.variable = tkinter.StringVar()
        self.variable.set("Sensors")
        self.variable2 = tkinter.StringVar()
        self.variable2.set("Signals")        
        filenames = filedialog.askopenfilenames(initialdir=self.favorite.get())
        if filenames:
            root.tk.splitlist(filenames)
            for file in filenames:
                data = pd.ExcelFile(file)               
                sheets = pd.read_excel(file)
                sheetsList = {data:[sheets]}
                tab=tkinter.OptionMenu(self, self.variable,    
                              *data.sheet_names, command = self._selectSignal
                                  ).grid(row=0, column=2, columnspan=2)                                                         

                column=tkinter.OptionMenu(self, self.variable2,  
                              *list(sheets) 
                                     ).grid(row=1, column=2, columnspan=2)   


    def _selectSignal(self, choice):
        columns = sheetsList[self.variable.get()]
        column.setitems(columns)

if __name__=='__main__':
    root = tkinter.Tk()
    filedialogexample(root).grid()
    root.mainloop()

我得到的错误是:

代码语言:javascript
复制
NameError: name 'sheetsList' is not defined

但是,如果我将_selectSignal放在与文件名相同的行中,我会得到错误:

代码语言:javascript
复制
AttributeError: 'filedialogexample' object has no attribute '_selectSignal'

我不知道该怎么解决这个问题。提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-01 23:29:31

global语句移动到每个方法(可能)就能解决问题。

附注:您可能对全局语句有一些误解。这是docs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41976354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档