'2015/09/29'에 해당되는 글 2건

  1. 2015.09.29 [Python 팁] Python에서 한글 사용
  2. 2015.09.29 [wxPython] Launcher 어플 Template

Python에서 한글로 된 주석 및 코드를 사용하기 위해서는 소스 앞부분에 다음과 같이 인코딩 방식을 지정하여야 한다.


1. 완성형

# -*- coding: euckr -*-


2. 확장 완성형 (윈도우)

# -*- coding: cp949 -*-


3. UTF-8

# -*- coding: utf-8 -*-


일단, 여기까지만 하면 위 세가지 인코딩 방식에 대해서 한글로 된 주석을 사용할 수 있다.


주석이 아닌 실제 문자열 변수에 한글 문자열 상수를 대입하는 것과 같이 소스 코드 내에서 사용하는 경우, ANSI 계열(완성형, 확장완성형)에서는 위와 같이 지정만해도 문제없이 사용이 가능하다.


하지만 UTF-8의 경우, 이와 같은 지정만으로는 제대로 되지 않는데, 파이썬이 기본적으로 문자열 상수를 ANSI로 받아들이려 하기 때문이다.

이런 문제를 해결하는 방법 중 한가지는 문자열 상수 사용시에 u를 따옴표 앞에 붙이는 것이다.

str = "한글 포함 상수"

대신에

str = u"한글 포함 상수"

를 사용한다


이 방법은 ANSI 계열에 사용했을 때도 역시 정상 동작한다.


<테스트 환경>
OS : Windows 7
Python 버전 : 2.7


,

버튼을 누르면 특정 프로그램이 실행되는 Launcher 어플의 Template입니다.


# -*- coding: utf-8 -*-
#!/usr/bin/python

import wx
import subprocess

BUTTON_ID_1 = 101
BUTTON_ID_2 = 102
BUTTON_ID_3 = 103
BUTTON_ID_4 = 104

COMMAND_PATH_1 = "" # 첫번째 버튼으로 실행할 실행파일 경로 예) "C:\\Windows\\explorer.exe"
COMMAND_PATH_2 = "" # 두번째 버튼으로 실행할 실행파일 경로
COMMAND_PATH_3 = "" # 세번째 버튼으로 실행할 실행파일 경로
COMMAND_PATH_4 = "" # 네번째 버튼으로 실행할 실행파일 경로

COMMAND_PARAM_1 = "" # 첫번째 버튼으로 실행할 실행파일 파라미터
COMMAND_PARAM_2 = "" # 두번째 버튼으로 실행할 실행파일 파라미터
COMMAND_PARAM_3 = "" # 세번째 버튼으로 실행할 실행파일 파라미터
COMMAND_PARAM_4 = "" # 네번째 버튼으로 실행할 실행파일 파라미터

def ShellExecute(path, param="", cwd=None, nonExecutable = False):
    # path  : 실행 파일 경로
    # param : 파라미터
    # cwd   : 현재 디렉토리
    # nonExecutable : True일 경우, 실행 파일이 아니어도 연결 프로그램으로 실행 가능
    try:
        if param == "":
            subprocess.Popen([path], cwd = cwd, shell=nonExecutable)
        else:
            subprocess.Popen([path, param], cwd = cwd, shell=nonExecutable)
    except OSError:
        wx.MessageBox(u"Launch Failed!", u"Info")

class MainWindow(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size = (320, 240),
            style = wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE)
            
        vbox = wx.BoxSizer(wx.VERTICAL)

        button = wx.Button(self, id = BUTTON_ID_1, label = u"Button 1", size = (-1, 50))
        vbox.Add(button, 0, wx.EXPAND | wx.ALL)
        self.Bind(wx.EVT_BUTTON, self.OnButton, button)
        
        button = wx.Button(self, id = BUTTON_ID_2, label = u"Button 2", size = (-1, 50))
        vbox.Add(button, 0, wx.EXPAND | wx.ALL)
        self.Bind(wx.EVT_BUTTON, self.OnButton, button)

        button = wx.Button(self, id = BUTTON_ID_3, label = u"Button 3", size = (-1, 50))
        vbox.Add(button, 0, wx.EXPAND | wx.ALL)
        self.Bind(wx.EVT_BUTTON, self.OnButton, button)

        button = wx.Button(self, id = BUTTON_ID_4, label = u"Button 4", size = (-1, 50))
        vbox.Add(button, 0, wx.EXPAND | wx.ALL)
        self.Bind(wx.EVT_BUTTON, self.OnButton, button)

        self.SetSizer(vbox, True)
        self.Layout()
        
    def OnButton(self, event):
        buttonId = event.GetId()
        
        if buttonId == BUTTON_ID_1:
            ShellExecute(COMMAND_PATH_1, COMMAND_PARAM_1)
        if buttonId == BUTTON_ID_2:
            ShellExecute(COMMAND_PATH_2, COMMAND_PARAM_2)
        if buttonId == BUTTON_ID_3:
            ShellExecute(COMMAND_PATH_3, COMMAND_PARAM_3)
        if buttonId == BUTTON_ID_4:
            ShellExecute(COMMAND_PATH_4, COMMAND_PARAM_4)

            
app = wx.App(False)
frame = MainWindow(None, -1, u"Title")
frame.Show(1)
app.MainLoop()




<테스트 환경>
OS : Windows 7
Python 버전 : 2.7
wxPython 버전 : 2.8.12.1


,