Delphi 델파이에서 파이썬 표현식 활용하기 (PYTHON4DELPHI 샘플 앱)
2020.11.03 16:57
다음은 델파이 관련 다양한 기술자료를 제공하고 있는 Anbarasan이 작성한 델파이와 파이썬 관련 컨텐츠를 번역한 것입니다.
- 원문(영어): https://blogs.embarcadero.com/author/anbarasana/
- [함께 보면 좋은 기술자료] 델파이 개발자를 위한 파이썬: www.devgear.co.kr/archives/3660
델파이에서 파이썬을 이용하기 위해서 필요한 Python4Delphi 활용 방법을 알고 싶으신가요?
Python for Delphi (P4D)는 파이썬 DLL을 델파이와 C++빌더에서 사용할 수 있는 무료 컴포넌트 셋입니다. 파이썬 스크립트를 매우 손쉽게 실행할 수도 있고, 새로운 파이썬 모듈이나 타입들도 생성할 수 있습니다. 이 기술 컨텐츠에서는 이 컴포넌트들을 활용해서 VCL 애플리케이션을 만들어보고 간단한 파이썬 표현식 실행, 출력 메세지를 출력하는 방법 등을 정리해보려고 합니다.
Python4Delphi Demo2 샘플은 메모란에 파이썬 표현식을 입력해 그 표현식을 확인하고, 그에 대한 메세지를 보여줄 수 있도록 하는 예제입니다. 깃허브에서 Demo2 소스코드를 확인할 수 있습니다. Demo1은 델파이에서 간단한 파이썬 스크립트를 실행하는 방법을 정리해놓았습니다.
필수 구성 요소: 최신 파이썬을 다운로드 받아 설치합니다. Python4Delphi 설치 절차에 따라서 설치를 완료하세요. Python4Delphi 따라서 시작하기 영상도 참고해보세요.
Python4Delphi Demo2 에서 사용하는 컴포넌트들:
- TPythonEngine: 델파이에서 파이썬 타입들을 생성하고, 파이썬과 통신하는 비교적 로우 레벨 루틴들을 모아놓은 컴포넌트입니다. Singleton 클래스로, 주요 속성들은 다음과 같습니다.
- AutoLoad: 파이썬 DLL을 자동으로 불러옵니다. 기본값은 ‘true’입니다.
- AutoUnload: 파이썬 DLL을 자동으로 불러오지 않습니다. 기본값은 ‘true’입니다.
- DllName: 기본적으로, 최신 버전(예. python39.dll)을 반영합니다. 사용자가 등록한 버전을 적용할 수도 있습니다.
- DllPath: 파이썬 DLL의 물리적인 위치 경로를 확인할 수 있습니다.
- InitScript: 현재 환경에서 실행할 파이썬 스크립트를 제공할 수 있습니다.
- IO: TPythonGUIInputOutput 컴포넌트를 이 속성에 연결하세요.
- RegVersion: 등록된 파이썬 버전을 알려줍니다 (예: 3.9)
- UseLastKnownVersion: 설치되어 있는 파이썬 버전을 확인하고 싶다면, 이 속성을 ‘True’로 설정해 놓으면 됩니다.
- TPythonGUIInputOutput: TPythonInputOutput에서 상속된 컴포넌트입니다 (파이썬 출력용 콘솔로 활용). 이 컴포넌트의 Output 속성을 사용해 Memo 컴포넌트를 연결해 Output 결과를 보여줄 수 있습니다.
- MaxLineLength: 줄당 최대 문자 길이
- MaxLines: 컴포넌트로 실행 가능한 최대한의 파이썬 스크립트 길이
- OutPut: Memo 컴포넌트와 연결해 출력값을 표시해보세요.
- RawOutput: raw ouput 결과를 산출합니다.
- UniCodeIO: ‘true’로 설정해 놓으면 입력값과 출력값을 유니코드로 보여줍니다.
- 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 에서 확인해보세요!