python gtk4 윈도우에서의 개발환경 구축과 운용#1

우선 이 시리즈는 워낙 장대해서 꾀나 긴 이야기가 될겁니다.

우선 https://github.com/wingtk/gvsbuild 로 들어가서 설치를 진행하고 옵니다.

그리고 powershell에 들어가서 $PROFILE이라고 치면 프로필 파일 경로가 뜨는데 저의 경우는 “C:\Users\admin\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1” 였어요.

따라서 그 경로의 해당 파일의 내용을 다음과 같이 고칩니다.

$env:LIB = "C:\gtk-build\gtk\x64\release\lib;" + $env:LIB
$env:INCLUDE = "C:\gtk-build\gtk\x64\release\include;C:\gtk-build\gtk\x64\release\include\cairo;C:\gtk-build\gtk\x64\release\include\glib-2.0;C:\gtk-build\gtk\x64\release\include\gobject-introspection-1.0;C:\gtk-build\gtk\x64\release\lib\glib-2.0\include;" + $env:INCLUDE
$env:Path = "C:\gtk\bin;" + $env:Path
$env:GTK_THEME = "WhiteSur-Light"
$settingsPath = "C:\gtk-build\gtk\x64\release\etc\gtk-4.0\settings.ini"
$settingsPath = "C:\gtk-build\gtk\x64\release\etc\gtk-3.0\settings.ini"
$settingsContent = @"
[Settings]
gtk-theme-name=WhiteSur-Light
"@
New-Item -Path (Split-Path $settingsPath -Parent) -ItemType Directory -Force
Set-Content -Path $settingsPath -Value $settingsContent -Force
$env:XDG_DATA_DIRS = "C:\gtk-build\gtk\x64\release\share;" + $env:XDG_DATA_DIRS

이렇게 하면 powershell이 시작되면 저 내용이 자동적으로 실행되어 환경변수를 잡아주게 되어 편하게 테마를 적용하실 수 있으십니다.

그리고

$env:GTK_DEBUG = "interactive"

를 실행창에서 실행하면 테마와 글꼴등을 interactive하게 선택할 수 있게 해줍니다.

따라서 이전에 설정했던 WhiteSur-Light 테마를 마음껏 적용할 수 있게 되죠.

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(
    ['current.py'],
    pathex=[],
    binaries=[
        ('C:/gtk/bin/gtk-4-1.dll', '.'),
        ('C:/gtk/bin/adwaita-1-0.dll', '.'),
        ('C:/gtk/bin/gobject-2.0-0.dll', '.'),
        ('C:/gtk/bin/glib-2.0-0.dll', '.'),
        ('C:/gtk/bin/gio-2.0-0.dll', '.'),
        ('C:/gtk/bin/cairo-2.dll', '.'),
        ('C:/gtk/bin/pango-1.0-0.dll', '.'),
        ('C:/gtk/bin/pangocairo-1.0-0.dll', '.'),
        ('C:/gtk/bin/gdk_pixbuf-2.0-0.dll', '.'),
        ('C:/gtk/bin/graphene-1.0-0.dll', '.'),
        ('C:/gtk/bin/epoxy-0.dll', '.'),
        ('C:/gtk/bin/fribidi-0.dll', '.'),
        ('C:/gtk/bin/harfbuzz.dll', '.'),
        ('C:/gtk/bin/fontconfig-1.dll', '.'),
        ('C:/gtk/bin/freetype-6.dll', '.'),
        ('C:/gtk/bin/intl.dll', '.'),
        ('C:/gtk/bin/libpng16.dll', '.'),
        ('C:/gtk/bin/girepository-1.0-1.dll', '.'),
        ('C:/gtk/bin/rsvg-2-2.dll', '.'),
        ('C:/gtk/bin/xml2-16.dll', '.'),
        ('C:/gtk/bin/zlib1.dll', '.'),
		('C:/gtk/bin/*.dll', '.'),
        #('C:/gtk/bin/libbrotlicommon.dll', '.'),
        #('C:/gtk/bin/libbrotlidec.dll', '.'),
        #('C:/gtk/bin/libwinpthread-1.dll', '.'), # 설치 후 주석 해제
    ],
    datas=[
        ('C:/gtk/share/glib-2.0/schemas', 'share/glib-2.0/schemas'),
        ('C:/gtk/share/icons/Adwaita', 'share/icons/Adwaita'),
        ('C:/gtk/lib/girepository-1.0', 'lib/girepository-1.0'),
        ('C:/gtk/lib/gdk-pixbuf-2.0/2.10.0/loaders', 'lib/gdk-pixbuf-2.0/2.10.0/loaders'),
        ('C:/gtk/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache', 'lib/gdk-pixbuf-2.0/2.10.0/'),
        ('U:/theme_test/style.css', '.'),
        ('C:/gtk/share/themes/WhiteSur-Light', 'share/themes/WhiteSur-Light'),
    ],
    hiddenimports=[
        'gi',
        'gi.repository.Gtk',
        'gi.repository.Gio',
        'gi.repository.Gdk',
        'gi.repository.Pango',
        'gi.repository.GdkPixbuf',
        'gi.repository.Adw',
        'gi.repository.GLib',
        'gi.repository.GObject',
        'gi.repository.Gsk',
        'zoneinfo',
        'tzdata',
    ],
    hookspath=[],
    hooksconfig={
        'gi': {
            'module-versions': {
                'Gtk': '4.0',
                'Gdk': '4.0',
                'Adw': '1',
            }
        }
    },
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='new2',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=False,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    onefile=True,
)

와 같은 파일을 만들고 test.spec과 같이 spec확장자를 사용하여 *.spec파일을 만듭니다.

pyinstaller test.spec과 같이 목적 디렉터리에서 실행하게 되면
new2.exe와 같은 실행파일이 하나 만들어지게 되는데요
이 파일은 단일파일로 컴파일되어 이 파일 하나만으로도 프로그램의 모든 역할을 다할 수 있습니다.
여기에 테마를 적용하고 싶으다면

//@echo off
set GI_TYPELIB_PATH=%CD%\lib\girepository-1.0
set GDK_PIXBUF_MODULEDIR=%CD%\lib\gdk-pixbuf-2.0\2.10.0\loaders
set GTK_THEME=WhiteSur-Light
start bin\new2.exe

와 같이 run.bat파일을 작성하시고

와 같이 필요로 하는 파일을 비치해놓으시면 됩니다.




위의 toshow파일은 트리 구조 입니다. 보고 따라하시면 되겠습니다.

이렇게 배포할 파일을 구성하시고

이렇게 정갈하고 깔끔하게 GUI가 반영이 되는 모습을 보실 수 있겠습니다.