본문 바로가기

wxPython

파이썬 GUI, 글자 해상도 선명하게 바꾸기, 해상도, DPI 조절

반응형

모니터 해상도 자동 인식 후 글자가 선명해지는 예제

개요 

    wxPython으로 StaticText를 만들어서 쓰다 보면, 글자가 흐리게 보이는 경우가 있다. 모니터를 다른 것으로 변경하면 더욱 도드라지는 경우도 있는데, 이는 wxPython에서 모니터의 DPI를 제대로 인식하지 못해서(?) 생기는 문제같다. 나도 애를 먹은 적이 있지만, 사실 실행시 코드 몇 줄만 추가하면 간단히 해결할 수 있는 문제이다. 

 

import ctypes

    ctypes 라이브러리는 C/C++ 언어로 작성된 함수를 파이썬에서 호출할 수 있도록 해주는 라이브러리이다. 해당 라이브러리를 사용하면 파이썬에서 쉽게 C/C++의 기능을 사용할 수 있다. (라고 바드가 알려주었다...ㄷㄷ) 아무튼 이 라이브러리를 사용하여 아래 코드를 추가해주면 손쉽게 글자 해상도를 높일 수 있다. 단 글자나 창의 크기가 변할수도있음에 주의하자!

import ctypes
try:
    ctypes.windll.shcore.SetProcessDpiAwareness(True)
except:
    pass

 

 

예제 

    ctypes 코드가 있는 부분을 주석처리 해보고 실행해보자. 글자 해상도에 변화가 느껴질 것이다. 

반응형
import wx
from wx.adv import *

class Example(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self,parent,id,'DPI Awareness', size=(450,200))
        # 사용자 코드
        panel = wx.Panel(self, -1)

        st = wx.StaticText(panel, -1, "모니터 해상도 조절 예제\n글자의 해상도 변화를 확인하세요!")
        font = wx.Font(20, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)
        st.SetFont(font)
        bsizer = wx.BoxSizer(wx.HORIZONTAL)
        bsizer.Add(st, -1, wx.EXPAND|wx.ALL, 30)

        panel.SetSizer(bsizer)
        self.Center()

        # 모니터 해상도 자동 조절!! 아래 부분을 주석처리 해보고 실행해보세요.
        import ctypes
        try:
            ctypes.windll.shcore.SetProcessDpiAwareness(True)
        except:
            pass

if __name__=="__main__":
    app = wx.App()
    frame=Example(parent=None, id=-1)
    frame.Show()
    app.MainLoop()

 

 

 

 

 

    도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :) 

 

반응형