wxPython JSON Pretty Viewer

Posted at 2010/11/29 20:44// Posted in wxPython/etc


import wx
import os
import simplejson as json

class TestFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, pos=(0, 0), size=(480, 640))
self.CentreOnScreen(wx.BOTH)

textCtrl = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_RICH2)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(textCtrl, 1, wx.ALL|wx.EXPAND, 0)
self.SetSizer(sizer)
self.SetAutoLayout(True)
textCtrl.Bind(wx.EVT_TEXT_ENTER, self.OnTextEnter)

self.textCtrl = textCtrl

def OnTextEnter(self, evt):
print "enter"
data = json.loads(self.textCtrl.GetValue())
text = json.dumps(data, indent=4)
text = text.replace("\\n", "")
text = text.replace('\\"', '"')
self.textCtrl.SetValue(text)

class TestApp(wx.App):
def OnInit(self):
"OnInit"
frame = TestFrame(None, "TestApp")
frame.Show()
self.SetTopWindow(frame)
return True

def OnExit(self):
"OnExit"
pass

TestApp(redirect=False).MainLoop()


Copy & Paste 후 Enter 누르면 한줄 JSON 이 이쁘게 보입니다.
이올린에 북마크하기
2010/11/29 20:44 2010/11/29 20:44
def OnCopy():
    value = 뭔가데이터

    if wx.TheClipboard.Open():
        do = wx.TextDataObject()
        do.SetText(value.replace(U"\n", U"\r\n"))
        wx.TheClipboard.SetData(do)
        wx.TheClipboard.Close()

def OnPaste():
    if wx.TheClipboard.Open():
        do = wx.TextDataObject()
        if wx.TheClipboard.GetData(do):
            value = do.GetText()
          
        wx.TheClipboard.Close()

클립보드를 사용한 copy & paste 코드입니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/07/25 14:54 2007/07/25 14:54
import time
from threading import Thread

class WorkThread(Thread):
    def __init__(self, onCurrentPos, onTotalCount):
        Thread.__init__(self)
        self.onCurrentPos = onCurrentPos
        self.onTotalCount = onTotalCount

    def run(self):
        self.onTotalCount(100)

        print "!!"
        for i in range(100):
            self.onCurrentPos(i+1)
            time.sleep(0.3)


import wx

class GagePanel(wx.Panel):
    MAX = 1000
    def __init__(self, parent, title):
        wx.Panel.__init__(self, parent, -1)

        self.title = title
        self.text = wx.StaticText(self, -1, title, (10, 10))

        gage = wx.Gauge(self, -1, self.MAX, (10, 30), (250, 25),
                    wx.GA_HORIZONTAL|wx.GA_SMOOTH)

        self.runButton = wx.Button(self, -1, "RUN", (210, 70))
        self.Bind(wx.EVT_BUTTON, self.OnRun, self.runButton)

        gage.SetBezelFace(5)
        gage.SetShadowWidth(5)
        self.gage = gage
        self.pos = 0
        self.count = 1

        self.workThread = None

    def OnCurrentPos(self, pos):
        self.pos = pos + 1
        self.gage.SetValue(self.MAX * self.pos / self.count)
        self.text.SetLabel("%s (%d/%d)" % (self.title, self.pos, self.count))

    def OnTotalCount(self, count):
        self.count = count

    def OnRun(self, event):
        if self.workThread:
            return

        self.workThread = WorkThread(self.OnCurrentPos, self.OnTotalCount)
        self.workThread.start()

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "Progress",
                pos = (0, 0), size = (320, 240))

        self.CentreOnScreen(wx.BOTH)

        self.panel = GagePanel(self, "progress")
        self.panel.Layout()

class App(wx.App):
    def OnInit(self):
        frame = MainFrame()
        self.SetTopWindow(frame)
        frame.Show()
        return True

App(redirect = False).MainLoop()
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/05/25 11:38 2007/05/25 11:38
wx.aui 를 사용해서 3d 렌더링 윈도우와 트리 컨트롤을 도킹시킨후
트리 컨트롤의 화면을 조절하자 3d 렌더링 화면의 카메라 줌 기능이 작동하지 않았다.

원인은 3d 렌더링 윈도우에 EVT_MOUSEWHEEL 이벤트가 발생하지 않는 것이었다.

다시 EVT_MOUSEWHEEL 이벤트를 3d 렌더링 윈도우에 발생하게하려면
EVT_LEFTDOWN 에서 self.SetFocus() 를 해주면 된다.

class RenderingWindow(wx.PyControl):

    ...

    def __BindEvents(self):
        self.Bind(wx.EVT_LEFT_DOWN,     self.__OnLButtonDown)
        self.Bind(wx.EVT_MOUSEWHEEL,    self.__OnMouseWheel)

    def __OnLButtonDown(self, event):
        print "left down"

        self.SetFocus()

    def __OnMouseWheel(self, event):
        print "mouse wheel"


   ...

   
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/05/09 11:43 2007/05/09 11:43