2017-02-01 7 views
0

私はPythonを初めて使い、Excelファイルを開くことができるGUIを構築しようとしています。私は既にそれぞれ異なるフォルダにリンクしているラジオボタンを持っています。このフォルダでは、複数のファイルを選択できます。次に、2つのOptionMenuが表示されます.1つはExcelのシートを読み、もう1つはExcelの列を読み込みます。これは私が立ち往生する場所です。私はこれらの2つのOptionMenuを互いにリンクさせることはできません。これは、これまでの私のコードです:私はExcludeから読み込んだOptionMenuをどのようにリンクできますか?

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() 

私は取得エラー:

NameError: name 'sheetsList' is not defined 

しかし、私は同じ行に_selectSignalを入れた場合、ファイル名かのように、私はエラーを取得:

AttributeError: 'filedialogexample' object has no attribute '_selectSignal' 

これを解決する方法がわかりません。助けをあらかじめありがとう!

+0

この質問は[最小限の完全かつ検証可能な例を作成する](http://stackoverflow.com/help/mcve)できますか? – xmcp

+0

@ xmcp、私はそれを短く、より明確にするために質問を書きました。それは混乱のビットだった – Cucumber12

答えて

0

すべての方法にglobalステートメントを移動すると(おそらく)問題が解決されます。

P.S.グローバル・ステートメントに関する誤解があるかもしれません。ここにはdocsがあります。

+0

ありがとう、それは助け! – Cucumber12

関連する問題