msys2에서 gtk3 python binding을 사용하기 위한 세팅 설정

msys2 ucrt64를 엽니다.

miniconda 를 설치하셨다면

cd C:/Users/admin/miniconda3/etc/profile.d를 통하여 msys 내에서 해당 경로로 이동합니다.

dir을 쳐서 해당 경로에 뭐가 있는지 확인합니다.

conda init bash를 통해 conda환경을 초기화 합니다.

source conda.sh

그리고 nano ~/.bashrc를 통해 bash 환경설정으로 들어갑니다.

pagedown 키를 쭉 눌러서 맨 밑줄로 이동한 후

source /c/Users/gsgzj/miniconda3/etc/profile.d/conda.sh

그리고 source ~/.bashrc 치셔서 적용해주시고

pacman -S mingw-w64-ucrt-x86_64-gcc

위의 한 줄을 추가하고 ctrl + o -> y -> enter -> ctrl +x 를 치고 exit을 쳐서 msys를 종료합니다.

그리고 다시 msys를 켜서 conda –version을 쳐서 정상적으로 실행되는지 확인합니다.

이제 gtk4를 설치할 차례입니다.

ucrt64.exe를 실행하시고

pacman -Suy
pacman -S mingw-w64-ucrt-x86_64-gtk4 mingw-w64-ucrt-x86_64-python3 mingw-w64-ucrt-x86_64-python3-gobject
gtk4-demo



 

gtk4-demo를 치시면 데모 창이 뜨는 것을 보실 수 있습니다.

이제 작성한 스크립트는

python3 helloworld.py와 같이 실행하실 수 있고

와 같이 실행되는 모습을 보실 수 있습니다.

더욱 자세한 정보는 https://pygobject.gnome.org/tutorials/에서 보세요

adawaita를 사용하여 테마를 개선하고 싶다면


pacman -S mingw-w64-ucrt-x86_64-libadwaita

를 설치하세요

import sys
import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw


class MainWindow(Gtk.ApplicationWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Things will go here

class MyApp(Adw.Application):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.connect('activate', self.on_activate)

    def on_activate(self, app):
        self.win = MainWindow(application=app)
        self.win.present()

app = MyApp(application_id="com.example.GtkApplication")
app.run(sys.argv)
import sys
import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw


class MainWindow(Gtk.ApplicationWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Things will go here
        self.box1 = Gtk.Box()
        self.set_child(self.box1)
        self.button = Gtk.Button(label="Hello")
        self.box1.append(self.button)
        

class MyApp(Adw.Application):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.connect('activate', self.on_activate)
        

    def on_activate(self, app):
        self.win = MainWindow(application=app)
        self.win.present()

app = MyApp(application_id="com.example.GtkApplication")
app.run(sys.argv)

라는 코드를 실행시켜 보면

로 버튼이 잘 생성되었음을 아실 수 있습니다.