다음은 델파이 관련 다양한 기술자료를 제공하고 있는 Anbarasan이 작성한 델파이와 파이썬 관련 컨텐츠를 번역한 것입니다.


 

델파이에서 파이썬을 이용하기 위해서 필요한 Python4Delphi 활용 방법을 알고 싶으신가요?

Python for Delphi (P4D)는 파이썬 DLL을 델파이와 C++빌더에서 사용할 수 있는 무료 컴포넌트 셋입니다. 파이썬 스크립트를 매우 손쉽게 실행할 수도 있고, 새로운 파이썬 모듈이나 타입들도 생성할 수 있습니다. 이 기술 컨텐츠에서는 이 컴포넌트들을 활용해서 VCL 애플리케이션을 만들어보고 간단한 파이썬 표현식 실행, 출력 메세지를 출력하는 방법 등을 정리해보려고 합니다.

Python4Delphi Demo2 샘플은 메모란에 파이썬 표현식을 입력해 그 표현식을 확인하고, 그에 대한 메세지를 보여줄 수 있도록 하는 예제입니다. 깃허브에서 Demo2 소스코드를 확인할 수 있습니다. Demo1은 델파이에서 간단한 파이썬 스크립트를 실행하는 방법을 정리해놓았습니다.

필수 구성 요소: 최신 파이썬을 다운로드 받아 설치합니다. Python4Delphi 설치 절차에 따라서 설치를 완료하세요. Python4Delphi 따라서 시작하기 영상도 참고해보세요.

 

Python4Delphi Demo2 에서 사용하는 컴포넌트들:

  1. TPythonEngine: 델파이에서 파이썬 타입들을 생성하고, 파이썬과 통신하는 비교적 로우 레벨 루틴들을 모아놓은 컴포넌트입니다. Singleton 클래스로, 주요 속성들은 다음과 같습니다.
    • AutoLoad: 파이썬 DLL을 자동으로 불러옵니다. 기본값은 ‘true’입니다.
    • AutoUnload: 파이썬 DLL을 자동으로 불러오지 않습니다. 기본값은 ‘true’입니다.
    • DllName: 기본적으로, 최신 버전(예. python39.dll)을 반영합니다. 사용자가 등록한 버전을 적용할 수도 있습니다.
    • DllPath: 파이썬 DLL의 물리적인 위치 경로를 확인할 수 있습니다.
    • InitScript: 현재 환경에서 실행할 파이썬 스크립트를 제공할 수 있습니다.
    • IO: TPythonGUIInputOutput 컴포넌트를 이 속성에 연결하세요.
    • RegVersion: 등록된 파이썬 버전을 알려줍니다 (예: 3.9)
    • UseLastKnownVersion: 설치되어 있는 파이썬 버전을 확인하고 싶다면, 이 속성을 ‘True’로 설정해 놓으면 됩니다.
  2. TPythonGUIInputOutput: TPythonInputOutput에서 상속된 컴포넌트입니다 (파이썬 출력용 콘솔로 활용). 이 컴포넌트의 Output 속성을 사용해 Memo 컴포넌트를 연결해 Output 결과를 보여줄 수 있습니다.
    • MaxLineLength: 줄당 최대 문자 길이
    • MaxLines: 컴포넌트로 실행 가능한 최대한의 파이썬 스크립트 길이
    • OutPut: Memo 컴포넌트와 연결해 출력값을 표시해보세요.
    • RawOutput: raw ouput 결과를 산출합니다.
    • UniCodeIO: ‘true’로 설정해 놓으면 입력값과 출력값을 유니코드로 보여줍니다.
  3. TMemo: 여러줄의 텍스트를 편집할 수 있는 컴포넌트입니다. 메모에 입력한 전체 또는 각 줄 마다의 텍스트를 편집할 수 있습니다.

  Python4Delphi Demo2 샘플은 깃허브 리파지토리 ..\Python4Delphi\Demos\Demo02.dproj 경로에서 확인할 수 있습니다. RAD스튜디오 10.4.1에서 프로젝트를 열어 실행해보세요.

 

구현부 자세히 보기:

  • PythonEngine1은 파이썬 또는 파이썬 API 연결을 지원합니다. 이 프로젝트에서는 Python3.9를 사용했습니다. TPythonEngine DllName 속성에서 확인할 수 있습니다.
  • PythonGUIInputOutput1은 GUI(Graphic User Interface)와 현재 실행중인 파이썬 스크립트 간의 입/출력을 라우팅하는 경로를 제공합니다.
  • Memo1은 파이썬 표현식 작성을 위해 사용하였고, Memo2에서는 출력값을 보여줍니다(표현식 결과값 확인은 Memo2 대신 ShowMessage를 사용했습니다). Buttons를 이용해 실행, 스크립트 불러오기, 스크립트 저장이 가능합니다.
  • 실행 버튼(Execute Button)을 클릭하면, 스크립트 표현식이 아래 코드를 통해 실행됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button1Click(Sender: TObject);
var
  Result : PPyObject;
begin
  with PythonEngine1 do
    begin
      Result := EvalStrings( Memo1.Lines );
      if Assigned(Result) then
        begin
          ShowMessage(Format(‘Eval: %s’,[PyObjectAsString(Result)]));
          Py_DECREF(Result);
        end
      else
        ShowMessage(‘Could not evaluate the script’);
    end;
end;
 
cs

EvalStings는 Memo1에 있는 수학 표현식을 계산하고 파이썬 개체(PPyObject)로 반환합니다. PyObjectAsString을 통해 파이썬 결과값을 문자열로 변환할 수 있습니다. Demo1에서 ExecString를 사용해 파이썬 스크립트는 실행하는 것과 어떤 차이가 있을까요?
EvalString로는 표현식 실행, 계산만 가능하지만 ExecStrings를 사용하면 파이썬 코드의 모든 부분을 실행할 수 있습니다. 파이썬 표현식에 대한 더 많은 정보를 클릭해 확인해보세요.

코드를 이용해 파일에서 Memo1로 스크립트를 불러와 보겠습니다.

1
2
3
4
5
6
7
8
9
with OpenDialog1 do
 
begin
 
   if Execute then
 
      Memo1.Lines.LoadFromFile( FileName );
 
end;
 
cs

 

코드를 이용해 스크립트를 파일에 저장해볼까요?

1
2
3
4
5
6
7
8
9
with SaveDialog1 do
 
begin
 
   if Execute then
 
      Memo1.Lines.SaveToFile( FileName );
 
end;

 

 

더 많은 정보는 https://devgear.co.kr/archives/3716 에서 확인해보세요! 

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15443
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13962
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16499
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22055
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18923
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39259
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174713
623 [고객사례-게임, 델파이] BVS Solitaire Collection (카드 게임) 관리자 2018.06.25 903
622 [고객 사례- 박물관, 시스템제어, 델파이] 미니어처 원더랜드 박물관 관리자 2016.12.19 903
621 n [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 6. 프로그램에서 조건에 따라 실행. If...Then...Else 문 관리자 2019.03.29 902
620 C++, IDE(통합개발환경)으로 개발하면 어떤 점이 좋을까요? 관리자 2018.05.30 901
619 [DelphiCon 요약] 델파이 고성능 구현 (High Performance Delphi) 관리자 2020.12.27 900
618 델파이 안드로이드 개발을 위해 OpenJDK 채택 file 김원경 2020.05.25 899
617 [XE8] 번거로운 수작업을 줄여 핵심기능 개발에 집중할 수 있는 개발 생산성 향상도구 Humphery 2015.04.28 897
616 [패치] RAD스튜디오 10.4.2, 델파이 컴파일러 관리자 2021.05.04 896
615 [10.3.3][업데이트][핫픽스] RAD 스튜디오, 델파이, C++빌더 10.3.3 패치 목록 [1] 험프리 2019.12.26 894
614 [오픈소스] TGPuttyLib 소개 - PuTTY 기반 SFTP 클라이언트 험프리 2020.01.03 893
613 N [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 25. 표준 파일 다이얼로그들 관리자 2019.03.29 893
612 [고객 사례- 의료, 델파이+임베디드DB] Management Plus – 안과 EHR 솔루션  file 관리자 2016.11.03 893
611 [업데이트][핫픽스][XE8] iOS 8 시뮬레이터 변경사항 대응 file Humphery 2015.05.11 886
610 [엠바카데로 Feature Friday][개발팁]기본 프로젝트 옵션을 RAD스튜디오 옵션 셋으로 만들기 관리자 2019.06.28 884
609 [개발자 Tip] 모바일 앱 개발 시 시간 낭비를 줄이는 Tip #1: 테스트하기 위해 기다리는 시간을 줄인다. 관리자 2016.12.26 881
608 [발표자료] 20180315 마이그레이션, 생각보다 더 쉽습니다 (C++빌더, 델파이) file 관리자 2018.03.19 881
607 [발표자료] 20160929 나만의 앱 완성하기 with 델파이 험프리 2016.09.21 881
606 20150224 [온라인세미나] VCL개발자를 위한 Speed UP! RAD스튜디오 발표자료 관리자 2015.02.25 880
» 델파이에서 파이썬 표현식 활용하기 (PYTHON4DELPHI 샘플 앱) 관리자 2020.11.03 876
604 [업데이트][10.3.2][패치] 업데이트 및 패치 정보 [5] 험프리 2019.08.23 872