2009-02-27 5 views
0

저는 Python을 처음 사용합니다. 나는 툴바를 생성 wxPython을하고 나는 현재 내 코드를 사용하여 응용 프로그램을 쓰고 있어요 것은 다음과 같습니다wxPython 툴바 도움말

class Window(wx.Frame) 
def __init__(self, parent, plot): 
    wx.Frame.__init__(self, parent, wx.ID_ANY, "Name", size =(900, 600)) 
    self.Centre() 

    self.toolbar = self.CreateToolBar(style=(wx.TB_HORZ_LAYOUT | wx.TB_TEXT)) 
    self.toolbar.SetToolBitmapSize((32,32)) 
    self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/fileopen.png')) 
    self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/filesave.png')) 
    self.toolbar.AddSeparator() 
    self.toolbar.Realize() 

나는 약간의 코드를 정리하려고 나는 그래서 자신의 클래스가 도구 모음을 원하는 I 툴바를 만들고 싶다면 간단히 다음과 같이 호출하십시오.

toolbar = Toolbar() 

제 질문은 어떻게 다시 작성하여 그와 같이 작동 할 수 있습니까? 현재 내 코드는 다음과 같습니다.

class Toolbar(): 
    def __init__(self): 
     self.toolbar = self.CreateToolBar(style=(wx.TB_HORZ_LAYOUT | wx.TB_TEXT)) 
     self.toolbar.SetToolBitmapSize((32,32)) 
     self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/fileopen.png')) 
     self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/filesave.png')) 
     self.toolbar.AddSeparator() 
     self.toolbar.Realize() 

'자체'작동 방식은 잘 모르겠습니다. 초기화 기능을 다시 작성해야합니까? 어떻게 수정해야합니까? 어떤 도움이라도 대단히 감사합니다. 감사합니다

답변

3

대신 도구 모음을 설정하는 클래스 대신 함수를 사용하십시오. 이 함수는 wx.Frame을 하위 클래스로하는 Window의 멤버 함수가 될 수 있습니다. 이렇게하면 도구 모음이 올바른 창에서 만들어지고 예상대로 연결됩니다.

위의 클래스는 툴바에 연결할 wx.Frame (클래스라는 Window 클래스)을 알고있는 경우 작동합니다.

class Toolbar(): 
    def __init__(self, frame_to_connect_to): 
    frame_to_connect_to.toolbar = frame_to_connect_to.CreateToolBar(style=(wx.TB_HORZ_LAYOUT | wx.TB_TEXT)) 
    frame_to_connect_to.toolbar.SetToolBitmapSize((32,32)) 
    frame_to_connect_to.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/fileopen.png')) 
    frame_to_connect_to.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/filesave.png')) 
    frame_to_connect_to.toolbar.AddSeparator() 
    frame_to_connect_to.toolbar.Realize() 

그것은 빠른 수정처럼 보인다 ...하지만 정말이 일을하는 클래스를 사용하여이 잘 사용하지 않습니다 ... 당신이 도구 모음 작성자 클래스에 프레임 개체를 전달해야 작동하도록하려면 수업. (난이 정확 말할 정도로 멀리 갈 것입니다.)

정말, 단지 것 물건을 조금 무엇을 정리할 것 자체 멤버 함수에 도구 모음 물건을 이동 :

class Window(wx.Frame) 
    def __init__(self, parent, plot): 
    wx.Frame.__init__(self, parent, wx.ID_ANY, "Name", size =(900, 600)) 
    self.Centre() 
    self._init_toolbar() 

    def _init_toolbar(self): 
    self.toolbar = self.CreateToolBar(style=(wx.TB_HORZ_LAYOUT | wx.TB_TEXT)) 
    self.toolbar.SetToolBitmapSize((32,32)) 
    self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/fileopen.png')) 
    self.toolbar.AddLabelTool(3, '', wx.Bitmap('GUI/icons/filesave.png')) 
    self.toolbar.AddSeparator() 
    self.toolbar.Realize() 

당신은 모든 이익을 얻습니다.

1

예. wxpython 코드를 이와 같은 객체로 분해하십시오. 손으로 GUI 코드를 작성할 경우 유지 보수가 훨씬 쉽습니다.

당신은 wx.ToolBar을 하위 클래스 필요 (wx.ToolBarBase의 서브 클래스 인 자체 및 wx.ToolBar의 대부분의 기능은 해당 네임 스페이스에서 파생됩니다) :

당신의 wx.Frame 전화에 대한 __init__에서 다음
class MyToolBar(wx.ToolBar): 
    def __init__(self, parent, *args, **kwargs): 
     wx.ToolBar.__init__(self, parent, *args, **kwargs) 
     #note self here and not self.toolbar 
     self.SetToolBitmapSize((32,32)) 
     #add other code here 

당신의 도구 모음 :

class MyFrame(wx.Frame): 
    def __init__(self, parent, *args, **kwargs): 
     wx.Frame.__init__(self, parent, *args, **kwargs) 
     #note that below, self refers to the wx.Frame 
     #self(wx.Frame) = parent for the toolbar constructor 
     toolbar = MyToolBar(self) 

wxPython Style Guide

또 한가지주의해야 할이이 종종 wxWidgets docs은 이동하기가 훨씬 쉬우 며 to decipher입니다.