문제점
NameError: name 'a' is not defined
접근과정
tkinter
를 활용해 UI용으로 만든 p1.py
파일과
p1.py
에서 command를 통해 실행할 파일 p2.py
파일이 있습니다.
궁극적인 목표는 p2.py
파일에서 어떤 파일의 파일 경로를 읽어내는 것입니다.
일단
p1.py
에tkinter.filedialog.askopenfilename
를 활용하여 얻은 파일의 경로를return
하는 함수fileopen()
를 만듭니다.def fileopen(): filepath = askopenfilename(parent=window, filetype=(("all files", "*.*")))
또,
fileopen()
하여 저장할 변수인a
를 만들고a
를global
로 전역변수로서 선언 하고p2.py
파일을import
하는 함수를 만듭니다. 이 함수는tkinter
로 만든 버튼을 클릭 시 실행되는 command로서 기능하게 됩니다.def c_color_rs_l(): global a a=fileopen() print(a) import p2
이후
c_color_rs_l
을 실행해보면a
에 정상적으로 filepath가 담겨있는 것을 확인가능합니다.하지만 p2를 import하게 되면
import p2
해서a
를 받아보면 불러낸 p1의 a가 정의되어 있지 않다고 합니다.
이게 실행되지 않는 이유는 제 생각에 아마도 p2에서 p1을 import할 때 [1]~[2]의 과정을 거치지 않고 import하기 때문에 a는 정의되어 있지 않은 것 같습니다.. 어떻게 고치면 좋을까여? 파이썬 고수님들...이걸로 뻥안치고 틀동안 쭉 고민하고 고쳐봤지만 잘 모르겠습니다.
접근과정2
제가 해본 또 다른 접근과정으로 p2에다 GUI 모듈인 tkinter.filedialog
를 임포트 하여 askopenfilename
를 실행시키게 되면 파일 경로는 잘 읽어냅니다.
그 후가 문제인데 GUI가 쓰레드 문제인가? (아직 뭐가 문제인지 정확히 몰라요.) 기존의 함수랑 충돌해 비동기적 실행을 할 수가 없었습니다. 한번만 askopenfilename
이 실행되는게 아니고 무한실행해요.
- 아직 class 함수도 아직 잘 모르는 상태에요. 도와주세요 고수여러분...