우선 이 시리즈는 워낙 장대해서 꾀나 긴 이야기가 될겁니다.
우선 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가 반영이 되는 모습을 보실 수 있겠습니다.