Python에서 Enum 정의를 DIAdem SUD(Dialog)와 공유하는 방법

업데이트 됨 May 26, 2026

환경

소프트웨어

  • DIAdem

프로그래밍 언어

  • Python

DIAdem에서 Python 스크립트와 SUD(User Dialog)는 서로 다른 실행 환경(Python vs VBScript)을 사용하므로, Python에서 정의한 객체(예: Enum)를 SUD로 직접 전달할 수 없습니다.
이 문서에서는 Python에서 정의한 열거형(enum)을 문자열로 변환하여 Global Variable을 통해 SUD와 공유하고, SUD에서 이를 다시 UI 컨트롤(ComboBox 등)에 사용하는 방법을 설명합니다.

  1. Python 코드 구성
    1.1. Python에서 Enum 정의 및 분리: Python에서 사용할 Enum을 정의하고, 이름과 값을 각각 리스트로 추출합니다.
    from enum import Enum
    import DIAdem 

    dd = DIAdem.Application

    class TestMode(Enum):
        AUTO = 0
        MANUAL = 1
        CALIBRATION = 2
    # Enum 이름 추출
    labels = [e.name for e in TestMode]
    # Enum 값 추출
    values = [e.value for e in TestMode]


    1.2. 문자열로 변환 (직렬화): SUD에서 사용할 수 있도록 리스트를 문자열로 변환하고 Global Variable로 선언합니다. 
    # Global Variable 선언
    dd.GlobalDim("TestMode_Labels,TestMode_Values")

    #문자열로 변환 (세미콜론 구분)
    dd.TestMode_Labels = ";".join(labels)
    dd.TestMode_Values = ";".join(str(v) for v in values)

    #예상 결과 
    TestMode_Labels = "AUTO;MANUAL;CALIBRATION"
    TestMode_Values = "0;1;2"


    1.3. SUD Dialog 실행: 구성한 데이터를 기반으로 SUD 다이얼로그를 호출합니다. 
    dd.SUDDlgShow("Dlg1", dd.CurrentScriptPath + "Enum.sud") 

  2. DIAdem 코드 구성
    2.1. SUD(VBScript)에서 문자열 → 배열 변환: Python에서 전달한 문자열을 배열로 분리합니다.
    EnumText = SplitString(TestMode_Labels)
    EnumInt  = SplitString(TestMode_Values) 

    2.2. ComboBox에 Enum 값 바인딩: 배열 데이터를 기반으로 ComboBox에 표시값(Label)과 내부값(Value)을 설정합니다.
    cmbTestMode.Items.RemoveAll

    For i = 0 To UBound(EnumText)
      cmbTestMode.Items.Add EnumText(i), EnumInt(i)
    Next

ComboBox에 Enum 값이 정상적으로 표시됩니다.
 
사용자가 선택한 값은 내부적으로 Enum의 value 값으로 전달됩니다.

Enum.zip 참조

Attachments