首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何运行wxGlade生成的代码

如何运行wxGlade生成的代码
EN

Stack Overflow用户
提问于 2012-03-29 18:46:32
回答 3查看 2.1K关注 0票数 3

我已经使用wxGlade创建了我的图形用户界面,它在显示中看起来很好。我现在正在尝试运行它生成的代码,然后将其添加到我完成的Python程序中。我已经尝试将它复制到文件结构中并运行它,然后将代码复制到一个新文件中。我已经检查了所需的文件都在pythonpath上,并且它们都是。每次我都收到同样的错误信息。错误消息

代码语言:javascript
复制
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

代码

代码语言:javascript
复制
#!/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()

我使用的是Python2.7,我的集成开发环境是带有PyDev的eclipse indigo。请帮帮忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-29 19:08:40

你的问题在于:

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

您已将面板命名为Title,但Title是需要字符串或unicode的属性。

如果您将Title重命名为其他名称(如MyTitle),您的代码将正常工作。

在您喜欢的编辑器中执行Find > Replace,并将self.Title的所有实例更改为self.MyTitlePanel (例如),保存文件并再次运行它。

票数 1
EN

Stack Overflow用户

发布于 2012-03-29 19:09:30

您将一个内部面板(FirstScreen的子面板)命名为Title,因此wxGlade尝试将其赋给一个变量self.Title。顺便说一句,self.TitlewxFrame的一个属性,用于设置框架的标题,并且需要一个字符串作为其参数。

为了避免这种名称冲突,您可以在实例变量名称前加上下划线。

票数 0
EN

Stack Overflow用户

发布于 2012-04-17 03:54:56

我建议你换成超级的wxFormBuilder

和wxGlade在一起我折腾了一个小时却一无所获。今天我试用了wxFormBuilder,在不到30分钟的时间里就完成了一个很好的wxPython图形用户界面,包括事件、文本框、按钮等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9923835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档