728x90
728x90

PyQt 커스텀 아이콘 패키지(fugueicons) 설치 및 사용해보기

들어가며

  • PyQt에는 기본 아이콘 팩이 있지만(참고), 아이콘의 종류가 적다.
  • 그래서 커스텀 아이콘 패키지(@fugueicons@)를 설치하여 사용할 수 있다.

 

방법

@pyqt5-fugeicons@ 패키지 설치하기

  • 터미널에서 다음 명령을 실행하여 @pyqt5-fugeicons@ 패키지를 설치한다.
> pip install pyqt5-fugueicons

 

아이콘 사용해보기

  • 다음과 같이 모듈을 불러와@fugeicons@의 아이콘을 사용해볼 수 있다.
import pyqt5_fugueicons as fugue

 

  • @icon()@ 메서드를 사용하여 아이콘을 불러올 수 있다.
  • PyQt 기본 아이콘팩의 아이콘을 사용하는 방법과 유사하다.
    • @QAction(self.style().standardIcon(icon), "example", self)@
import pyqt5_fugueicons as fugue
from PyQt5 import QtWidgets

icon = fugue.icon('application-blue')
button = QtWidgets.PushButton(icon, 'application-blue')

 

그림자 있는 아이콘 사용하기

  • @fugeicons@ 아이콘팩의 아이콘에 그림자를 추가할 수도 있다.
  • 함수의 인자(@shadowless@)를 @True@로 설정해줄 경우, 아이콘의 그림자를 없애고, @False@를 설정할 경우 아이콘에 그림자를 추가한다.
    • 기본값은 @False@로, @shadowless@ 인자를 설정해주지 않으면 그림자 있는 아이콘이 생성된다.
import pyqt5_fugueicons as fugue

icon = fugue.icon('application-blue', shadowless=True)

 

아이콘 사이즈 설정하기

  • @size@ 인자를 사용하여 @fugeicons@ 아이콘팩의 아이콘의 사이즈를 설정해줄 수도 있다.
  • @fallback_size@ 인자를 사용할 경우, 지정된 크기의 아이콘이 발견되지 않을 경우 다시 작은 사이즈의 아이콘으로 출력되도록한다.
import pyqt5_fugueicons as fugue

# 24x24 크기의 아이콘이 발견되지 않을 경우, 16x16 크기의 아이콘으로 출력한다.
icon = fugue.icon('application-blue', size=24, fallback_size=True)

 

아이콘 이름 확인해보기

  • 다음과 같이 코드를 실행하여 @fugeicons@ 아이콘팩의 아이콘 이름들을 확인해볼 수 있다.
for name in fugue.iconNames():
    print(name)

 

애니메이션 아이콘 사용하기

  • @movie()@ 메서드를 사용하여 애니메이션 아이콘을 사용할 수 있다.
    • @movie()@ 메서드는 @icon()@ 메서드와 비슷하지만, 16x16 또는 24x24 크기의 아이콘만 사용할 수 있기 때문에 사이즈(@size@)를 @16@ 또는 @24@로 설정해주어야 한다.
  • @QMovie@ 클래스는 Qt 프레임워크에 GIF가 출력될 수 있도록 해준다.
import pyqt5_fugueicons as fugue
from PyQt5 import QtWidgets

movie = fugue.movie('terminal')
movie.start()

label = QtWidgets.QLabel()
label.setMovie(movie)

 

  • @movieNames()@ 메서드를 사용하면 모든 애니메이션 아이콘의 이름들을 확인할 수 있다.
for name in fugue.movieNames():
    print(name)
application-terminal
construction
counter
counter-count
counter-count-up
lock-warning
selection
selection-input
selection-select
selection-select-input
terminal
terminal-medium
terminal-network
ui-progress-bar-indeterminate

 

아이콘 확인해보기

기본 아이콘

  • 약 3,570개의 아이콘이 있다고 한다.
  • 모든 아이콘을 확인해 보고 싶다면 아래의 링크를 참고한다.
 

Fugue Iconpack (3570 icons) | Yusuke Kamiyamane

 

www.iconarchive.com

import sys
import pyqt5_fugueicons as fugue
from PyQt5.QtWidgets import QApplication, QGridLayout, QPushButton, QScrollArea, QWidget

class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()

        self.setWindowTitle("PyQt5 fugueicons Icon Checker")
        self.setGeometry(100, 100, 800, 600)
        
        iconNames = sorted([attr for attr in fugue.iconNames()])
        layout = QGridLayout()

        for n, name in enumerate(iconNames):
            btn = QPushButton(f"({name})")
            icon = fugue.icon(name, shadowless=True, size=16, fallback_size=True)
            btn.setIcon(icon)
            layout.addWidget(btn, n // 6, n % 6)

        scroll_area = QScrollArea()
        scroll_area.setWidgetResizable(True)
        
        scroll_content = QWidget()
        scroll_content.setLayout(layout)
        
        scroll_area.setWidget(scroll_content)

        main_layout = QGridLayout(self)
        main_layout.addWidget(scroll_area)

app = QApplication(sys.argv)

w = Window()
w.show()

sys.exit(app.exec_())

 

애니메이션 아이콘

import sys
import pyqt5_fugueicons as fugue
from PyQt5.QtWidgets import QApplication, QGridLayout, QPushButton, QScrollArea, QWidget, QLabel, QHBoxLayout

class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()

        self.setWindowTitle("PyQt5 fugueicons Animated Icon Checker")
        self.setGeometry(100, 100, 800, 600)
        
        iconNames = sorted([attr for attr in fugue.movieNames()])
        layout = QGridLayout()

        for n, name in enumerate(iconNames):
            movieIcon = fugue.movie(name, size=16, fallback_size=True)     # 16 or 24 are only acceptable for size.
            movieIcon.start()

            label = QLabel()
            label.setMovie(movieIcon)

            iconName = QPushButton(f"({name})")

            miniLayout = QHBoxLayout()
            miniLayout.addWidget(iconName)
            miniLayout.addWidget(label)

            layout.addLayout(miniLayout, n // 3, n % 3)

        scroll_area = QScrollArea()
        scroll_area.setWidgetResizable(True)
        
        scroll_content = QWidget()
        scroll_content.setLayout(layout)
        
        scroll_area.setWidget(scroll_content)

        main_layout = QGridLayout(self)
        main_layout.addWidget(scroll_area)

app = QApplication(sys.argv)

w = Window()
w.show()

sys.exit(app.exec_())

 

 

참고 사이트

 

pyqt5-fugueicons

Fugue Icons for PyQt5

pypi.org

 

728x90
728x90