2013-07-20 95 views
-2

我正在嘗試開發一個非常簡單的wxpython GUI。目前只有一個按鈕,在文本控制框下方打開文件對話框&。目前我所要做的只是將打開的文件名打印到文本控制框,但不斷收到錯誤消息。 「全球名稱未定義」。任何幫助,將不勝感激!python wxpython全局名稱未定義

#!/usr/bin/python 

import os 
import wx 
import wx.lib.agw.multidirdialog as MDD 

wildcard = "Python source (*.py)|*.py|" \ 
      "All files (*.*)|*.*" 

######################################################################## 
class MyFrame(wx.Frame): 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY) 
     panel = wx.Panel(self, wx.ID_ANY) 
     self.currentDirectory = os.getcwd() 

     text = wx.TextCtrl(panel, -1, "",style=wx.TE_MULTILINE|wx.HSCROLL) 

     # create the buttons and bindings 
     openFileDlgBtn = wx.Button(panel, label="Show OPEN FileDialog") 
     openFileDlgBtn.Bind(wx.EVT_BUTTON, self.onOpenFile) 

     # put the buttons in a sizer 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(openFileDlgBtn, 0, wx.ALL|wx.CENTER, 5) 
     sizer.Add(text, 1, wx.EXPAND|wx.ALL, 5) 
     panel.SetSizer(sizer) 

    #---------------------------------------------------------------------- 
    def onOpenFile(self, event): 
     """ 
     Create and show the Open FileDialog 
     """ 
     dlg = wx.FileDialog(
      self, message="Choose a file", 
      defaultDir=self.currentDirectory, 
      defaultFile="", 
      wildcard=wildcard, 
      style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR 
      ) 
     if dlg.ShowModal() == wx.ID_OK: 
      paths = dlg.GetPaths() 
      print "You chose the following file(s):" 
      for path in paths: 
       print path 
       text.AppendText('path') 
     dlg.Destroy() 

#---------------------------------------------------------------------- 
# Run the program 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyFrame() 
    frame.Show() 
    app.MainLoop() 
+0

請包括*全*回溯,包括錯誤信息。您在這裏發佈的內容不足以診斷問題。 –

+0

我是新來編程,所以不會有一個線索如何做一個完整的追溯:-)看起來是問題的代碼是text.AppendText('路徑')以前我只是打印變量「路徑」到控制檯確保它能夠工作,現在我希望將該變量打印到文本控件上,但我一直在控制檯窗口中顯示該錯誤。 –

+0

當Python給你一個錯誤時,將打印一個帶有回溯的完整錯誤消息。沒有什麼特別的需要去做。它包含底部的「全局名稱...未定義」異常消息。 –

回答

2

這是一個受過教育的猜測,完全基於目測代碼:

您參考textonOpenFile()方法,但不要在該方法中定義它。相反,text是一個不同方法的本地名稱。

如果你想達到你的__init__方法分配給textTextCtrl對象,對它的引用存儲在self所以你可以參考它在其他的方法太:

def __init__(self): 
    # .... 
    self.text = text = wx.TextCtrl(panel, -1, "",style=wx.TE_MULTILINE|wx.HSCROLL) 

def onOpenFile(self, event): 
    # .... 
    if dlg.ShowModal() == wx.ID_OK: 
     paths = dlg.GetPaths() 
     print "You chose the following file(s):" 
     for path in paths: 
      print path 
      self.text.AppendText('path') 
+0

這聽起來完全正確,但是對於編程來說,新手並不確定如何。請你給我舉個例子。 –

+0

添加了更新。 –

+0

優秀。非常感謝,完美的作品!克林頓。 –