Пожалуйста, обратитесь к урезанному примеру скрипта ниже.Когда я запускаю это в OS X, menubar ведет себя точно так, как вы ожидаете.В Windows, однако, есть заметное отставание (~ 4 с на моем 2 ГГц Core 2 Duo) рендеринга пункта меню «Медленный».Это не совсем правильно, если приложение показывает старое доброе предупреждение (Not Responding)
- это не совсем то поведение, которое вы ожидаете после щелчка по меню.
Кто-нибудь сталкивался с этой проблемой?до?Я что-то не так делаю на стороне Windows?
Что касается версий, я протестировал как последнюю стабильную версию, 2.8.12.1, так и разработку, 2.9.2.1, и я использую Python 2.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()