wxPython分割frame例子错误

lioujian47 2009-01-30 01:57:56

例8.12 如何创建你自己的分割窗

import wx

class SplitterExampleFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title)
self.MakeMenuBar()
self.minpane = 0
self.initpos = 0
self.sp = wx.SplitterWindow(self)# 创建一个分割窗
self.p1 = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)# 创建子面板
self.p2 = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)
self.p1.SetBackgroundColour("pink")
self.p2.SetBackgroundColour("sky blue")
self.p1.Hide()# 确保备用的子面板被隐藏
self.p2.Hide()

self.sp.Initialize(self.p1)# 初始化分割窗

self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGING,
self.OnSashChanging, self.sp)
self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED,
self.OnSashChanged, self.sp)


def MakeMenuBar(self):
menu = wx.Menu()
item = menu.Append(-1, "Split horizontally")
self.Bind(wx.EVT_MENU, self.OnSplitH, item)
self.Bind(wx.EVT_Update_UI, self.OnCheckCanSplit, item)
item = menu.Append(-1, "Split vertically")
self.Bind(wx.EVT_MENU, self.OnSplitV, item)
self.Bind(wx.EVT_Update_UI, self.OnCheckCanSplit, item)
item = menu.Append(-1, "Unsplit")
self.Bind(wx.EVT_MENU, self.OnUnsplit, item)
self.Bind(wx.EVT_Update_UI, self.OnCheckCanUnsplit, item)

menu.AppendSeparator()
item = menu.Append(-1, "Set initial sash position")
self.Bind(wx.EVT_MENU, self.OnSetPos, item)
item = menu.Append(-1, "Set minimum pane size")
self.Bind(wx.EVT_MENU, self.OnSetMin, item)

menu.AppendSeparator()
item = menu.Append(wx.ID_EXIT, "E&xit")
self.Bind(wx.EVT_MENU, self.OnExit, item)

mbar = wx.MenuBar()
mbar.Append(menu, "Splitter")
self.SetMenuBar(mbar)


def OnSashChanging(self, evt):
print "OnSashChanging:", evt.GetSashPosition()

def OnSashChanged(self, evt):
print "OnSashChanged:", evt.GetSashPosition()


def OnSplitH(self, evt):# 响应水平分割请求
self.sp.SplitHorizontally(self.p1, self.p2, self.initpos)

def OnSplitV(self, evt):# 响应垂直分割请求
self.sp.SplitVertically(self.p1, self.p2, self.initpos)

def OnCheckCanSplit(self, evt):
evt.Enable(not self.sp.IsSplit())

def OnCheckCanUnsplit(self, evt):
evt.Enable(self.sp.IsSplit())

def OnUnsplit(self, evt):
self.sp.Unsplit()

def OnSetMin(self, evt):
minpane = wx.GetNumberFromUser(
"Enter the minimum pane size",
"", "Minimum Pane Size", self.minpane,
0, 1000, self)
if minpane != -1:
self.minpane = minpane
self.sp.SetMinimumPaneSize(self.minpane)

def OnSetPos(self, evt):
initpos = wx.GetNumberFromUser(
"Enter the initial sash position (to be used in the Split call)",
"", "Initial Sash Position", self.initpos,
-1000, 1000, self)
if initpos != -1:
self.initpos = initpos


def OnExit(self, evt):
self.Close()


app = wx.PySimpleApp(redirect=True)
frm = SplitterExampleFrame(None, "Splitter Example")
frm.SetSize((600,500))
frm.Show()
app.SetTopWindow(frm)
app.MainLoop()

平台vista 32
idle,python2.5
运行报错,何故?
...全文
268 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2009-02-18
  • 打赏
  • 举报
回复
……
cg1227 2009-02-18
  • 打赏
  • 举报
回复
lioujian47 2009-01-31
  • 打赏
  • 举报
回复
Taceback(most recent call last):
File "此脚本" line 97, in <module>
frm = SplitterExampleFrame(None, 'Splitter Example')
File "此脚本" line 6, in __init__
self.MakeMenuBar()
File "此脚本" line 29, in
MakeMenuBar
self.Bind(wx.Evt_Update_UI, self.OnCheckCanSplit, item)
AttributeError:'module' object has no attribute
'EVT_Update_UI'

说是没有 EVt_Update_UI的属性.囧

原来是'EVT_Update_UI'这个要大写.......
全部改成
'EVT_UPDATE_UI'
就ok了.










iambic 2009-01-30
  • 打赏
  • 举报
回复
请贴错误……

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧