请参考下面的精简示例脚本。当我在OSX中运行这个时,菜单栏的行为和您期望的完全一样。然而,在Windows中,“Slow”菜单项的呈现有一个明显的延迟(我的2GHz Core 2 Duo大约有4秒)。这感觉一点都不正确,让一个应用程序显示好的旧的(Not Responding)
警告并不是您在菜单中单击后所期望的行为。在
以前有人遇到过这个问题吗?我是不是在Windows端做错了什么?在
至于版本,我用最新的稳定版本2.8.12.1和开发2.9.2.1进行了测试,我运行的是python2.7。在
import wx
from operator import itemgetter
from itertools import groupby
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Hello', size=(1150,700))
self.panel = wx.Panel(self, -1)
file_menu = wx.Menu()
open_item = file_menu.Append(-1, 'Open Something')
self.slow_menu = wx.Menu()
another_menu = wx.Menu()
another_item = another_menu.Append(-1, 'Something')
more_menu = wx.Menu()
more_item = more_menu.Append(-1, 'Else')
self.menu_bar = wx.MenuBar()
self.menu_bar.Append(file_menu, 'File')
self.menu_bar.Append(self.slow_menu, 'Slow')
self.menu_bar.Append(another_menu, 'Fake')
self.menu_bar.Append(more_menu, 'Hello')
self.SetMenuBar(self.menu_bar)
self.setup_slow_menu()
self.Bind(wx.EVT_CLOSE, self.OnClose)
def OnClose(self, event):
self.Destroy()
def OnDud(self, event):
pass
def setup_slow_menu(self):
names = """
James Christopher Ronald Mary Lisa Michelle
John Daniel Anthony Patricia Nancy Laura
Robert Paul Kevin Linda Karen Sarah
Michael Mark Jason Barbara Betty Kimberly
William Donald Jeff Elizabeth Helen Deborah
David George Jennifer Sandra
Richard Kenneth Maria Donna
Charles Steven Susan Carol
Joseph Edward Margaret Ruth
Thomas Brian Dorothy Sharon""".split()
some_data = ['red','blue','white','orange','brown']
some_more_data = ['socks','pants','shirts','gloves','hats','red','blue','white','orange','brown']
subs = ['Bla', 'Blabla']
subsubs = []
for name in names[:25]:
subsubs.append((subs[0], name))
for name in names[25:]:
subsubs.append((subs[1], name))
for sub in subs:
sub_menu = wx.Menu()
self.slow_menu.AppendMenu(-1, sub, sub_menu)
for sub, subsub in [r for r in subsubs if r[0]==sub]:
subsub_menu = wx.Menu()
sub_menu.AppendMenu(-1, subsub, subsub_menu)
for i in xrange(30):
subsubsub_menu = wx.Menu()
subsub_menu.AppendMenu(-1, str(i), subsubsub_menu)
for label in some_more_data:
menu_item = wx.MenuItem(subsubsub_menu, id=wx.NewId(), text=label)
subsubsub_menu.AppendItem(menu_item)
self.Bind(wx.EVT_MENU, self.OnDud, id=menu_item.GetId())
for label in some_data:
menu_item = wx.MenuItem(subsub_menu, id=wx.NewId(), text=label)
subsub_menu.AppendItem(menu_item)
self.Bind(wx.EVT_MENU, self.OnDud, id=menu_item.GetId())
for label in some_data:
menu_item = wx.MenuItem(sub_menu, id=wx.NewId(), text=label)
sub_menu.AppendItem(menu_item)
self.Bind(wx.EVT_MENU, self.OnDud, id=menu_item.GetId())
for label in some_data:
menu_item = wx.MenuItem(self.slow_menu, id=wx.NewId(), text=label)
self.slow_menu.AppendItem(menu_item)
self.Bind(wx.EVT_MENU, self.OnDud, id=menu_item.GetId())
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MainFrame()
frame.Show()
app.MainLoop()
后来我把这个贴在wxPython列表上,得到了this的回复。真的没什么错,只是XP就是XP而已。在
相关问题 更多 >
编程相关推荐