파이썬 <<<NameError: name '~~~~' is not defined>>> 에러 질문입니다.

조회수 6062회

안녕하세요 현재 파이썬으로 GUI 작업 중 입니다. 다름이 아니라,

NameError: name '~~~~' is not defined

이런 에러가 자주 발생하게 되는데 이유를 모르겠습니다. 현재 def openfile 함수 내 win 창을 열고 그 안 창에서 변수를 입력받아 쓰고 싶은데 저런 오류가 나는 이유를 모르겠습니다. 고수님들의 조언 부탁드립니다. 밑엔 제 현재 코드입니다. 일부분만 가져와봤습니다.

import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
from tkinter import Menu
import ctypes as C
import tkinter.scrolledtext as tkst
from ctypes.util import find_library
import tkinter.messagebox



#파일 열기 함수
def openfile():
    filename = filedialog.askopenfilename(initialdir = "C:/Users/PC02/source/repos/pysetup/pysetup", title = "파일을 선택해주세요", filetypes = (('RAW 파일','*.RAW'),('모든 파일',"*.*"))) #filename = 파일의 경로
    refilename = filename.replace('/', '\\')
    global bname
    bname = refilename.encode('utf-8')

    win = tk.Tk()   

    # 탭 설정    
    win.title("계산 설정")  
    tabControl = ttk.Notebook(win)          
    tab1 = ttk.Frame(tabControl)            
    tabControl.add(tab1, text='오차 및 계산방법')      
    tabControl.pack(expand=1, fill="both")  

     #----------------------- 오차 라벨---------------------------------
    mighty = ttk.LabelFrame(tab1, text=' 오차 ')
    mighty.grid(column=0, row=0, padx=8, pady=4)

    Margin = tk.DoubleVar()                                       
    MarginEntered = ttk.Entry(mighty, width=20, textvariable=Margin)  
    MarginEntered.grid(column=1, row=0, sticky=tk.W)

    # 오차 = : 라벨창
    a_label = ttk.Label(mighty, text="오차 : ")
    a_label.grid(column=0, row=0)

    action = ttk.Button(mighty, text="Calculate", command=clickOK)    
    action.grid(column=2, row=0)


    win.mainloop()

def clickOK():


    IEEE = C.CDLL('IEEE')
    tole = C.c_double(Margin.get())
  • 에러 내용만 보면 import 함수가 없거나 버전이 달라서 함수가 바뀌었거나 하는 것으로 보입니다. 어느 위치에서 오류가 발생하는 지 확인이 필요해 보입니다. 알 수 없는 사용자 2019.9.16 10:16
  • NameError: name 'Margin' is not defined 알 수 없는 사용자 2019.9.16 19:28
  • 이라는 오류가 발생했습니다. 알 수 없는 사용자 2019.9.16 19:29
  • openfile함수안에서 Margin 초기화를 했으므로 clickOK 안에서는 Margin을 사용할 수 없습니다. 정영훈 2019.9.16 21:37
  • 어떻게 하면 사용할 수 있을까요..? 또한 초기화의 개념을 잘 모르겠습니다. 초기화하지 않고 쓰고싶은데 어떡하죠.. 알 수 없는 사용자 2019.9.16 22:02
  • 이벤트와 UI 생성은 분리해야 합니다. 간단하게 처리하고 싶다면 Margin 변수를 전역변수로 하세요. 그러나 디자인에 대한 학습을 권합니다. 정영훈 2019.9.17 01:58
  • globel Margin 이렇게 말씀이신가요? 결과는 똑같던데 알 수 없는 사용자 2019.9.17 02:01
  • 당연히 openfile 호출후에 사용가능하겠지요...동작가능한 코드를 올려보세요. 정영훈 2019.9.17 02:04
  • github 같은 곳에 올려보세요. 정영훈 2019.9.17 02:04
  • Margin 값이 PY_VAR1 으로 출력됩니다.. ㅜㅜ 알 수 없는 사용자 2019.9.17 02:07
  • https://github.com/yydyyydyydy/hello-world/blob/master/py 알 수 없는 사용자 2019.9.17 02:12
  • 이벤트와 UI 생성은 분리해서 다르게 적용했습니다.. 어떻게 풀어야할지 감이 안와서 주소 남깁니다... 알 수 없는 사용자 2019.9.17 02:13
  • github 의 코드와 질문상의 코드와 다르고 .RAW 파일도 있어야 하고 IEEE 는 네이티브 모듈이군요? 수치해석쪽 공부하는 학생같은데...ui를 빼고 먼저 구현해보는건 어떤가요? 코드를 보니 Margin 변수문제가 아니라 변수 scope 에 대해서 전혀 모르는 것 같아요. 정영훈 2019.9.17 02:30
  • 과거 했던 질문의 연장선이군요...일단 c로 되어 있는 IEEE는 dll 이어야 합니다. exe의 main 함수를 호출할 수 없습니다. 라이브러리로 되어 있어야 한다(export 선언이 되어 있는)는 이야깁니다. 만약 exe파일이고 출력되는 텍스트 내용을 받고자 한다면 IPC 라는 방법으로 해야 합니다. 미안한 이야기지만 현재 질문자의 실력으론 어려워 보입니다. 우선 파이썬 기본부터 공부를 하고 IEEE 도 dll 형태의 모듈로 컴파일하세요. 그리고 우선 ui 없이 테스트부터 하세요 그리고 ui를 만들기 바랍니다. 정영훈 2019.9.17 03:03

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)