2013-07-20 4 views
-2

저는 매우 간단한 wxpython GUI를 개발하려고합니다. 현재 텍스트 콘트롤 박스 밑에 파일 다이얼로그 &을 여는 버튼이 있습니다. 지금은 텍스트 컨트롤 상자에 열린 파일 이름을 인쇄하지만 오류 메시지가 계속 표시됩니다. "전역 이름이 정의되지 않았습니다". 어떤 도움을 주시면 감사하겠습니다!파이썬 wxpython 글로벌 이름이 정의되지 않았습니다.

당신은 onOpenFile() 방법 text를 참조하지만, 그 방법을 정의하지 않습니다

#!/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 ('path')입니다. 이전에는 변수 "path"를 콘솔을 사용하여 제대로 작동하는지 확인하고, 이제 해당 변수를 텍스트 컨트롤 위젯에 인쇄하고 싶지만 콘솔 창에 오류가 표시되도록 계속합니다. –

+0

파이썬에서 오류가 발생하면 추적 오류가있는 전체 오류 메시지가 인쇄됩니다. 특별한 일은 할 필요가 없습니다. 그것은 하단에'global name ... not defined' 예외 메시지를 포함합니다. –

답변

2

이 전적으로 코드를 째려를 기반으로 추측이다. text은 대신 다른 메소드의 로컬 이름입니다. 당신은, 당신은 __init__ 방법 text에 할당 된 TextCtrl 객체에 도달 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

우수. 정말 고마워요, 완벽하게 작동합니다! 클린턴. –

관련 문제