Как запустить сгенерированный код wxGlade
Я создал свой графический интерфейс с помощью wxGlade, и он хорошо выглядит на дисплее. Сейчас я пытаюсь запустить сгенерированный код, прежде чем добавить его в законченную программу Python. Я попытался скопировать его в структуру файла и запустить его, а затем скопировать код в новый файл. Я проверил необходимые файлы на pythonpath и все они. Каждый раз, когда я получаю одно и то же сообщение об ошибке. Сообщение об ошибке
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. Пожалуйста помоги.
3 ответа
Ваша проблема с этим:
self.Title = wxPanel(self, -1, style=wxDOUBLE_BORDER|wxTAB_TRAVERSAL)
Вы назвали панель Title
, но Title
это свойство, которое ожидает строку или Unicode.
Если вы переименуете Title
к чему-то другому (как MyTitle
), ваш код будет работать.
Сделать Find > Replace
в вашем любимом редакторе и измените все экземпляры self.Title
в self.MyTitlePanel
(например) сохраните файл и запустите его снова.
Я рекомендую перейти на превосходный wxFormBuilder.
С wxGlade я целый час бездельничал, ничего не получая. Сегодня я попробовал wxFormBuilder, и у меня был хороший рабочий интерфейс wxPython менее чем за 30 минут, с событиями, текстовыми полями, кнопками и т. Д.
Вы назвали одну из своих внутренних панелей (дети FirstScreen
) Title
поэтому wxGlade пытается присвоить его переменной self.Title
, Между прочим, self.Title
является собственностью wxFrame
это используется, чтобы установить заголовок фрейма, и ожидает строку в качестве аргумента.
Чтобы избежать таких конфликтов имен, вы можете использовать префикс имен ваших экземпляров с подчеркиванием.