2012-03-29 14 views
2

私はwxGladeを使用してGUIを作成しました。私は今完成したPythonプログラムに追加する前に生成したコードを実行しようとしています。私はそれをファイル構造にコピーして実行し、コードを新しいファイルにコピーしています。私は必要なファイルがpythonpathにあることを確認しています。私は毎回この同じエラーメッセージを受け取ります。エラーメッセージ私は、Python 2.7を使用しています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 

コード

#!/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はEclipseとインディゴです。 助けてください。あなたの問題はこれである

+0

私はwxで作業しましたが、 ...珍しいまたは少し非難された。 wxは使いやすいので、あなた自身(あまり複雑ではない)のGUIを自分で作成することを検討して、よりメンテナンスが容易で、余分な/余分なコードを減らすことになります。 - 2行目の21行目のエラーは、コード生成が正しく機能していないことを示しています。 – phineas

答えて

1

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

あなたはパネルTitleを命名しているが、Titleは、文字列またはUnicodeを期待properyです。

Titleの名前をMyTitleのように変更すると、コードが機能します。

好きなエディタでFind > Replaceを実行し、self.Titleのすべてのインスタンスをself.MyTitlePanelに変更します(たとえば、ファイルを保存してもう一度実行します)。

+0

wxGladeがgettext(簡単にローカライズするために使用されるパケット)を使用していることに気がついたので、gettext.install( "FirstScreen")を実行してPythonで文字列を作成する必要がありました。 – ntg

0

内側パネルの1つ(FirstScreenの子)Titleの名前を付けたので、wxGladeはそれを変数self.Titleに割り当てようとします。ちなみに、self.Titleは、フレームのタイトルを設定するために使用されるwxFrameのプロパティであり、文字列を引数として想定しています。

このような名前の衝突を避けるために、インスタンス変数名の前にアンダースコアを付けることができます。

0

素晴らしいwxFormBuilderに変更することをおすすめします。

wxGladeを使用して、私はどこにもいなくなりました。今日私はwxFormBuilderを試してみました。イベント、テキストボックス、ボタンなどを使って30分もかからずにwxPythonのGUIがうまく動作しました。

関連する問題