gtk4에 macOS테마 사용도전하기

【MV】Lucky☆Orb feat. Hatsune Miku by emon(Tes.)  / ラッキー☆オーブ feat. 初音ミク by emon(Tes.) 【MIKU EXPO 5th】

gsudo 를 설치합니다.

msys2 mingw64를 관리자 권한으로 실행하세요 
pacman -S mingw-w64-x86_64-sassc

https://github.com/vinceliuice/WhiteSur-gtk-theme

을 클론하여 테마를 다운 받습니다.

사실 위의 과정은 귀찮다 https://www.gnome-look.org/p/1403328 에서 받고 싶은거 받아주자

pacman -Syu –noconfirm
pacman -S –noconfirm –needed mingw-w64-x86_64-sassc

네, 이해합니다! 지금까지의 모든 정보를 바탕으로, GTK4 테마 적용을 위한 파일 위치와 내용을 처음부터 끝까지 명확하게 문서화하여 정리해 드리겠습니다. 이 문서를 잘 저장해 두시면 나중에 다시 참고하실 수 있을 거예요.


MSYS2 환경에서 Python GTK4 애플리케이션 테마 적용 완벽 가이드

이 가이드는 MSYS2 (Mingw64) 환경에서 Python GTK4 애플리케이션에 WhiteSur-Light 테마를 적용하는 방법을 단계별로 설명합니다.

목표: 당신의 GTK4 앱이 WhiteSur-Light 테마로 표시되도록 합니다.


1단계: GTK4 테마 파일 준비 및 배치

GTK4 테마는 특정 규칙에 따라 MSYS2 홈 디렉토리 내에 위치해야 합니다.

  1. WhiteSur-Light 테마 다운로드:
    • 사용하려는 WhiteSur-Light 테마의 GTK4 호환 버전을 다운로드합니다. (예: GitHub, Pling 등)
    • 다운로드한 파일은 보통 .zip 또는 .tar.xz 형태의 압축 파일입니다.
  2. 테마 압축 해제 및 배치:
    • 압축 파일을 푼 후, WhiteSur-Light라는 이름의 폴더가 생기는지 확인합니다. 이 폴더 안에는 gtk-4.0, gtk-3.0, cinnamon 등의 하위 폴더가 있을 것입니다.
    • WhiteSur-Light 폴더 전체를 MSYS2의 사용자 테마 디렉토리인 ~/.themes/ 안에 복사합니다.
    • Windows 탐색기 경로:C:\msys64\home\admin\.themes\(여기서 admin은 당신의 MSYS2 사용자 이름입니다. .themes 폴더가 보이지 않는다면 Windows 탐색기에서 숨김 파일 표시를 활성화하거나 주소창에 직접 입력하세요.)
    • 결과적으로 다음과 같은 경로가 되어야 합니다:C:\msys64\home\admin\.themes\WhiteSur-Light\(그리고 이 WhiteSur-Light 폴더 안에 gtk-4.0 폴더와 그 내용물(gtk.css, gtk.gresource 등)이 있어야 합니다.)

2단계: GTK 설정 파일 (settings.ini) 배치 및 구성

GTK에게 어떤 테마를 사용할지 알려주는 설정 파일입니다.

  1. 필요한 폴더 생성:MSYS2 터미널을 열고 다음 명령어를 입력하여 필요한 디렉토리를 생성합니다. Bashmkdir -p ~/.config/gtk-4.0/
    • 이 명령은 C:\msys64\home\admin\.config\gtk-4.0\ 경로에 폴더가 없으면 자동으로 만들어 줍니다. (.config 폴더 역시 숨김 폴더입니다.)
  2. settings.ini 파일 생성 및 내용 작성:
    • C:\msys64\home\admin\.config\gtk-4.0\ 폴더로 이동합니다.
    • 이 폴더 안에 settings.ini라는 이름의 새 텍스트 파일을 생성합니다.
    • 파일을 열고 정확히 다음 내용을 입력하거나 붙여넣습니다: Ini, TOML[Settings] gtk-theme-name=WhiteSur-Light
    • gtk-theme-name= 뒤에는 1단계에서 사용한 테마 폴더 이름과 정확히 일치해야 합니다. (대소문자 구분)
    • 파일을 UTF-8 인코딩으로 저장합니다. (메모장 등에서 저장 시 인코딩을 지정할 수 있습니다.)

3단계: Python 코드 확인

Python GTK4 코드 내에서 테마 설정이 settings.ini를 방해하지 않도록 해야 합니다.

  1. 테마 강제 설정 줄 주석 처리/제거:당신의 Python 코드 (app.py 또는 해당 파일)를 열어, Gtk.Settings.get_default()를 사용하여 테마 이름을 직접 설정하는 줄이 단 한 군데만 존재하고, 다른 모든 곳(특히 MainWindow 클래스 내부)에서는 완전히 주석 처리되거나 삭제되어 있는지 확인합니다.
    • 올바른 예시 (코드 상단에 한 번만): Pythonimport sys import gi gi.require_version('Gtk', '4.0') gi.require_version('Adw', '1') from gi.repository import Gtk, Adw settings = Gtk.Settings.get_default() settings.set_property("gtk-theme-name", "WhiteSur-Light") # 이 줄은 여기에만! # 다른 곳에서는 이와 유사한 줄이 없어야 합니다.
    • 파일을 저장합니다.

4단계: 변경 사항 적용 및 테스트

모든 설정이 완료되었다면, 이제 MSYS2 환경에서 앱을 실행하여 테마가 적용되었는지 확인합니다.

  1. MSYS2 터미널 완전 재시작:
    • 가장 중요합니다. settings.ini와 같은 환경 설정 파일은 터미널 세션이 시작될 때 로드되는 경우가 많으므로, 현재 열려 있는 MSYS2 터미널 창을 완전히 닫고 새로 열어야 합니다.
  2. 애플리케이션 실행:MSYS2 터미널에서 당신의 Python 애플리케이션을 실행합니다. Bashpython your_app_file_name.py (예: python app.py)
  3. 결과 확인:
    • 앱이 실행되었을 때 WhiteSur-Light 테마가 적용되어 있는지 확인합니다.

5단계: 문제 발생 시 디버깅 (선택 사항)

만약 여전히 테마가 적용되지 않거나 이상하게 보인다면, 다음과 같이 디버깅 정보를 얻을 수 있습니다.

  1. GTK Inspector (인스펙터) 사용:
    • 앱이 실행된 상태에서 Ctrl + F12를 누르면 GTK Inspector 창이 열립니다. 이 도구를 통해 현재 적용된 CSS 스타일을 직접 확인할 수 있습니다.
    • 만약 Ctrl + F12가 작동하지 않는다면, 다음 명령으로 앱을 실행해 보세요: Bashexport GTK_DEBUG=interactive python your_app_file_name.py 이후 Ctrl + F12를 다시 시도합니다.
  2. GTK CSS 디버그 메시지 확인:
    • 테마의 CSS 파일이 제대로 파싱되고 있는지 확인하려면 다음 명령으로 앱을 실행하고 터미널 출력을 확인합니다: Bashexport GTK_DEBUG=css python your_app_file_name.py
    • 이전처럼 Theme parser warning 메시지(alpha() is deprecated, @define-color and named colors are deprecated 등)가 계속 보인다면, 테마 파일 자체의 CSS 문법이 당신의 GTK4 버전에 완벽하게 호환되지 않는다는 의미입니다. 이 경우 다른 GTK4 호환 테마를 시도해 보는 것이 가장 좋은 해결책일 수 있습니다.

이 가이드가 테마 적용 문제를 해결하는 데 도움이 되기를 바랍니다. 차근차근 따라 해 보시고, 어떤 단계에서든 문제가 발생하면 다시 알려주세요!





#include <gtk/gtk.h>

static void
print_hello(GtkWidget* widget,
    gpointer   data)
{
    g_print("Hello World\n");
}

static void
activate(GtkApplication* app,
    gpointer        user_data)
{
    GtkWidget* window;
    GtkWidget* button;

    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window), "Hello");
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

    button = gtk_button_new_with_label("Hello World");
    g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL);
    gtk_window_set_child(GTK_WINDOW(window), button);

    gtk_window_present(GTK_WINDOW(window));

    GtkCssProvider *provider = gtk_css_provider_new();
    gtk_css_provider_load_from_path(provider, "/usr/share/themes/WhiteSur-Light/gtk-4.0/gtk.css");
    gtk_style_context_add_provider_for_display(
    gdk_display_get_default(),
    GTK_STYLE_PROVIDER(provider),
    GTK_STYLE_PROVIDER_PRIORITY_APPLICATION
);


}

int
main(int    argc,
    char** argv)
{
    GtkApplication* app;
    int status;

    app = gtk_application_new("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
    status = g_application_run(G_APPLICATION(app), argc, argv);
    g_object_unref(app);

    return status;
}

와 같이 설정한 뒤

settings -> GTK 테마 -> WhiteSur-Light 으로 진입하여 바꿔주시면

잘 됩니다.