본문 바로가기

Language/Python

[wxPython] Bitmap 화면에 출력하기

본 내용의 출처는 이글루 블로그의 '하린아빠' 라는 네임을 쓰시는 분의 블로그입니다.

[출처] - http://pythondev.egloos.com/103759


행여나 이글루 블로그가 없어지면 참고할 곳이 사라지기에 주인장님께 댓글을 남기고 퍼 옵니다.



[wxPython] Bitmap 화면에 출력하기



#!/usr/bin/python
# -*- coding: cp949 -*-
# bitmap.py

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size = (300, 300))

        # bitmap 생성
        self.bitmap = wx.Bitmap('images/memento.jpg')
        # Paint 이벤트 연결
        wx.EVT_PAINT(self, self.OnPaint)
        self.Centre()

    def OnPaint(self, event):
        # dc 생성
        dc = wx.PaintDC(self)
        # 60, 20 좌표에 Bitmap 로드
        dc.DrawBitmap(self.bitmap, 60, 20)

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'Memento')
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app = MyApp(0)
app.MainLoop()

[실행 화면]







p.s 윗 코드에 보면 def OnPaint가 있는데, 저렇게 쓰면 상위 클래스의 메소드와 동일한 이름을 명명해서

     그런지, signature does not match 메시지가 발생한다. 오버라이딩이 되는 거라고 봐야 하는 거 같은데..

     상위 클래스라면 wx.Frame에 동일한 메소드가 정의 되어 있을텐데 뒤져봐도 나오진 않더라.

     (내가 못 찾은 건지... 흠 ㅡㅡㅋ)


     아무튼 그래서 OnPaint라는 것은 이름을 바꿔서 지정하는 것이 나을 듯 하다.

     OnPaint의 이름을 바꿔서 쓴다면 그 메소드는 def__init__ 메소드 안에서 wx.EVT_PAINT 의 인자값으로도

     호출(self.OnPaint)되고 있기 때문에 그 부분도 같이 바꾸어주어야 안 바꾸면 호출 시에 에러가 똿~~