2012-03-29 54 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 

代碼

#!/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() 
我使用Python 2.7

,我的IDE是日食靛藍與PyDev的。 請幫忙。

+0

我已經與WX工作,但我不知道是否該代碼只是...不尋常或有點過時。 wx易於使用,您可以考慮自己編寫自己的(不太複雜的)GUI,並且最終得到更易維護,更少超量/冗餘的代碼。 - 第二行,第21行錯誤,表示代碼生成工作不正常。 – phineas 2012-03-29 11:16:16

回答

1

你的問題是這樣的:

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

您有一個名爲面板Title,但Title是需要一個字符串或Unicode一個屬性格式。

如果您將Title重命名爲其他內容(例如MyTitle),那麼您的代碼將起作用。

在你喜歡的編輯器做一個Find > Replace和改變self.Title所有實例self.MyTitlePanel(例如)保存文件並重新運行。

+0

我注意到wxGlade使用gettext(用於輕鬆本地化的數據包),所以可能會出現這種情況,您需要先運行gettext.install(「FirstScreen」),然後才能讓python爲您創建字符串。 – ntg 2016-02-02 10:12:50

0

您將您的內部面板命名爲FirstScreen的子項Title,因此wxGlade會嘗試將其分配給變量self.Title。順便提一句,self.TitlewxFrame的一個屬性,用於設置框架的標題,並且期望一個字符串作爲其參數。

爲了避免這樣的名稱衝突,你可以用下劃線前綴您的實例變量名。

0

我建議改變以精湛的wxFormBuilder

隨着wxGlade我搞砸一小時左右一事無成。今天,我想wxFormBuilder,並有一個很好的在不到30分鐘的工作wxPython的GUI,完整的事件,文本框,按鈕等