2012-03-29 5 views
2

wxGlade를 사용하여 GUI를 만들었으며 화면이 잘 보입니다. 이제 완성 된 Python 프로그램에 추가하기 전에 생성 된 코드를 실행하려고합니다. 파일 구조에 파일을 복사하고 실행 한 다음 코드를 새 파일에 복사하려고했습니다. 필요한 파일이 pythonpath에 있는지 확인하고 모두 있습니다. 매번이 동일한 오류 메시지가 나타납니다. 오류 메시지wxGlade 생성 코드를 실행하는 방법

Traceback (most recent call last): 
    File "C:\Users\Steb\workspace\Check\GuiAttempt.py", line 85, in <module> 
    frame_4 = FirstScreen(None, -1, "") 
    File "C:\Users\Steb\workspace\Check\GuiAttempt.py", line 21, in __init__ 
    self.Title = wxPanel(self, -1, style=wxDOUBLE_BORDER|wxTAB_TRAVERSAL) 
    File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_windows.py", line 402, in SetTitle 
    return _windows_.TopLevelWindow_SetTitle(*args, **kwargs) 
TypeError: String or Unicode type required 

코드 내가 파이썬 2.7를 사용하고

#!/usr/bin/env python 
# -*- coding: iso-8859-15 -*- 
# generated by wxGlade 0.6.5 (standalone edition) on Wed Mar 28 19:14:57 2012 

from wxPython.wx import * 

# begin wxGlade: extracode 
# end wxGlade 


class FirstScreen(wxFrame): 
    def __init__(self, *args, **kwds): 
     # begin wxGlade: FirstScreen.__init__ 
     kwds["style"] = wxDEFAULT_FRAME_STYLE 
     wxFrame.__init__(self, *args, **kwds) 
     self.Title = wxPanel(self, -1, style=wxDOUBLE_BORDER|wxTAB_TRAVERSAL) 
     self.label_1 = wxStaticText(self.Title, -1, "LA Task Refactoriser\n", style=wxALIGN_CENTRE) 
     self.tree_ctrl_2 = wxTreeCtrl(self, -1, style=wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT|wxTR_DEFAULT_STYLE|wxSUNKEN_BORDER) 
     self.sizer_9_staticbox = wxStaticBox(self, -1, "File A") 
     self.tree_ctrl_3 = wxTreeCtrl(self, -1, style=wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT|wxTR_DEFAULT_STYLE|wxSUNKEN_BORDER) 
     self.sizer_10_staticbox = wxStaticBox(self, -1, "File B") 
     self.tree_ctrl_4 = wxTreeCtrl(self, -1, style=wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT|wxTR_DEFAULT_STYLE|wxSUNKEN_BORDER) 
     self.sizer_11_staticbox = wxStaticBox(self, -1, "File C") 
     self.button_1 = wxButton(self, -1, "Load Files") 
     self.button_2 = wxButton(self, -1, "Quit") 

     self.__set_properties() 
     self.__do_layout() 
     # end wxGlade 

    def __set_properties(self): 
     # begin wxGlade: FirstScreen.__set_properties 
     self.SetTitle("frame_4") 
     self.SetSize((387, 417)) 
     self.SetBackgroundColour(wxColour(255, 255, 255)) 
     self.label_1.SetMinSize((160, 38)) 
     self.label_1.SetBackgroundColour(wxColour(255, 255, 255)) 
     self.label_1.SetFont(wxFont(12, wxROMAN, wxNORMAL, wxBOLD, 0, "")) 
     self.label_1.Enable(False) 
     self.Title.SetBackgroundColour(wxColour(255, 255, 255)) 
     self.Title.SetForegroundColour(wxColour(0, 0, 255)) 
     self.Title.SetFont(wxFont(12, wxSCRIPT, wxNORMAL, wxBOLD, 0, "")) 
     self.Title.Enable(False) 
     # end wxGlade 

    def __do_layout(self): 
     # begin wxGlade: FirstScreen.__do_layout 
     sizer_6 = wxBoxSizer(wxVERTICAL) 
     sizer_7 = wxBoxSizer(wxVERTICAL) 
     sizer_12 = wxBoxSizer(wxHORIZONTAL) 
     self.sizer_11_staticbox.Lower() 
     sizer_11 = wxStaticBoxSizer(self.sizer_11_staticbox, wxHORIZONTAL) 
     self.sizer_10_staticbox.Lower() 
     sizer_10 = wxStaticBoxSizer(self.sizer_10_staticbox, wxHORIZONTAL) 
     self.sizer_9_staticbox.Lower() 
     sizer_9 = wxStaticBoxSizer(self.sizer_9_staticbox, wxHORIZONTAL) 
     sizer_8 = wxBoxSizer(wxHORIZONTAL) 
     sizer_8.Add(self.label_1, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 100) 
     self.Title.SetSizer(sizer_8) 
     sizer_7.Add(self.Title, 2, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5) 
     sizer_9.Add(self.tree_ctrl_2, 1, wxEXPAND, 0) 
     sizer_7.Add(sizer_9, 1, wxEXPAND, 0) 
     sizer_10.Add(self.tree_ctrl_3, 1, wxEXPAND, 0) 
     sizer_7.Add(sizer_10, 1, wxEXPAND, 0) 
     sizer_11.Add(self.tree_ctrl_4, 1, wxEXPAND, 0) 
     sizer_7.Add(sizer_11, 1, wxEXPAND, 0) 
     sizer_12.Add(self.button_1, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 75) 
     sizer_12.Add(self.button_2, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 75) 
     sizer_7.Add(sizer_12, 1, wxEXPAND, 0) 
     sizer_6.Add(sizer_7, 1, wxEXPAND, 0) 
     self.SetSizer(sizer_6) 
     self.Layout() 
     self.SetSize((387, 417)) 
     # end wxGlade 

# end of class FirstScreen 
if __name__ == "__main__": 
    app = wxPySimpleApp(0) 
    wxInitAllImageHandlers() 
    frame_4 = FirstScreen(None, -1, "") 
    app.SetTopWindow(frame_4) 
    frame_4.Show() 
    app.MainLoop() 

을 내 IDE는의 PyDev 이클립스 인디고입니다. 도와주세요.

self.Title = wxPanel(self, -1, style=wxDOUBLE_BORDER|wxTAB_TRAVERSAL)

님의 패널 Title 이름,하지만 Title 문자열 또는 유니 코드를 예상하는 때에 프로퍼티입니다 :

+0

저는 wx로 작업 했었지만, 코드가 정당한 것인지는 모르겠습니다. ... 특이하거나 조금 비추천. wx는 사용하기 쉽고, (너무 복잡하지 않은) GUI를 직접 작성하는 것을 고려해 볼 수 있으며 유지 보수가 용이하고 수퍼 플러 우스/중복 코드가 적게 든다. - 두 번째 줄, 21 행의 오류는 코드 생성이 제대로 작동하지 않았 음을 나타냅니다. – phineas

답변

1

귀하의 문제는이 함께합니다.

Title의 이름을 MyTitle과 같은 것으로 변경하면 코드가 작동합니다.

좋아하는 편집기에서 Find > Replace을 실행하고 self.Title의 모든 인스턴스를 self.MyTitlePanel (예 :)로 변경하고 파일을 저장하고 다시 실행하십시오.

+0

wxGlade는 gettext (패킷을 쉽게 현지화하는 데 사용됨)를 사용하므로 gettext.install ("FirstScreen")을 실행해야 파이썬에서 문자열을 만들 수 있습니다. – ntg

0

내부 패널 (FirstScreen의 자식) 중 하나에 Title을 지정 했으므로 wxGlade는 변수를 self.Title에 할당하려고합니다. 덧붙여 말하면 self.Title은 프레임 제목을 설정하는 데 사용되는 wxFrame의 속성이며 문자열을 인수로 기대합니다.

이러한 이름 충돌을 피하려면 인스턴스 변수 이름 앞에 밑줄을 붙이십시오.

0

우수한 wxFormBuilder으로 변경하는 것이 좋습니다.

wxGlade를 사용하여 나는 한 시간 동안 아무렇지도 않게되었습니다. 오늘 wxFormBuilder를 시도해 보았습니다. wxPython GUI를 30 분 내에 완성 시켰습니다. 이벤트, 텍스트 상자, 버튼 등으로 완성되었습니다.