편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2019.06.10

    모듈 임포시 기존의 함수로 정의된 변수의 초기화 문제


    문제점

    NameError: name 'a' is not defined
    

    접근과정

    tkinter를 활용해 UI용으로 만든 p1.py 파일과

    p1.py에서 command를 통해 실행할 파일 p2.py 파일이 있습니다.
    궁극적인 목표는 p2.py 파일에서 어떤 파일의 파일 경로를 읽어내는 것입니다.

    1. 일단 p1.pytkinter.filedialog.askopenfilename를 활용하여 얻은 파일의 경로를 return하는 함수 fileopen()를 만듭니다.

      def fileopen():
          filepath = askopenfilename(parent=window, filetype=(("all files", "*.*")))
      
    2. 또, fileopen() 하여 저장할 변수인 a를 만들고 aglobal로 전역변수로서 선언 하고 p2.py 파일을 import하는 함수를 만듭니다. 이 함수는 tkinter로 만든 버튼을 클릭 시 실행되는 command로서 기능하게 됩니다.

      def c_color_rs_l():
          global a
          a=fileopen()
          print(a)
          import p2
      
    3. 이후 c_color_rs_l을 실행해보면 a에 정상적으로 filepath가 담겨있는 것을 확인가능합니다.

    4. 하지만 p2를 import하게 되면 import p2해서 a를 받아보면 불러낸 p1의 a가 정의되어 있지 않다고 합니다.

    이게 실행되지 않는 이유는 제 생각에 아마도 p2에서 p1을 import할 때 [1]~[2]의 과정을 거치지 않고 import하기 때문에 a는 정의되어 있지 않은 것 같습니다.. 어떻게 고치면 좋을까여? 파이썬 고수님들...이걸로 뻥안치고 틀동안 쭉 고민하고 고쳐봤지만 잘 모르겠습니다.

    접근과정2

    제가 해본 또 다른 접근과정으로 p2에다 GUI 모듈인 tkinter.filedialog를 임포트 하여 askopenfilename를 실행시키게 되면 파일 경로는 잘 읽어냅니다. 그 후가 문제인데 GUI가 쓰레드 문제인가? (아직 뭐가 문제인지 정확히 몰라요.) 기존의 함수랑 충돌해 비동기적 실행을 할 수가 없었습니다. 한번만 askopenfilename이 실행되는게 아니고 무한실행해요.

    • 아직 class 함수도 아직 잘 모르는 상태에요. 도와주세요 고수여러분...
  • 프로필 알 수 없는 사용자님의 편집
    날짜2019.06.10

    모듈 임포시 기존의 함수로 정의된 변수의 초기화 문제


    문제점

    NameError: name 'a' is not defined
    

    접근과정

    tkinter를 활용해 UI용으로 만든 p1.py 파일과

    p1.py에서 command를 통해 실행할 파일 p2.py 파일이 있습니다.
    궁극적인 목표는 p2.py 파일에서 어떤 파일의 파일 경로를 읽어내는 것입니다.

    [1] 일단 p1.py 에 tkinter.filedialog.askopenfilename를 활용하여 얻은 파일의 경로를 return하는 함수 'fileopen()'를 만듭니다.

    def fileopen():
        filepath = askopenfilename(parent=window, filetype=(("all files", "*.*")))
    

    [2] 또, fileopen() 하여 저장할 변수인 a를 만들고 a를 global로 전역변수로서 선언 하고 p2.py 파일을 import하는 함수를 만듭니다. 이 함수는 tkinter로 만든 버튼을 클릭 시 실행되는 command로서 기능하게 됩니다.

    def c_color_rs_l(): global a; a=fileopen(); print(a);  import p2;
    

    [3]. 이후 c_color_rs_l을 실행해보면 a에 정상적으로 filepath가 담겨있는 것을 확인가능합니다.

    [4] 하지만 p2를 import하게 되면 import p2해서 a를 받아보면 불러낸 p1의 a가 정의되어 있지 않다고 합니다.

    이게 실행되지 않는 이유는 제 생각에 아마도 p2에서 p1을 import할 때 [1]~[2]의 과정을 거치지 않고 import하기 때문에 a는 정의되어 있지 않은 것 같습니다.. 어떻게 고치면 좋을까여? 파이썬 고수님들...이걸로 뻥안치고 2틀동안 쭉 고민하고 고쳐봤지만 잘 모르겠습니다.

    접근과정2

    제가 해본 또 다른 접근과정으로 p2에다 GUI 모듈인 tkinter.filedialog를 임포트 하여 askopenfilename를 실행시키게 되면 파일 경로는 잘 읽어냅니다. 그 후가 문제인데 GUI가 쓰레드 문제인가? (아직 뭐가 문제인지 정확히 몰라요ㅠ) 기존의 함수랑 충돌해 비동기적 실행을 할 수가 없었습니다. 한번만 askopenfilename이 실행되는게 아니고 무한실행해요..

    • 아직 class 함수도 아직 잘 모르는 상태에요ㅠ 도와주세요 고수여러분...