0
wxMenuItem = wxMenuSource.InsertRadioItem(order, wx.ID_ANY, test, "")

App.Bind(wx.EVT_MENU, OnPerspective_Click, wxMenuItem)

order += 1

手順に従ってラジオ項目を挿入し、メニュー項目をクリックするとプログラムがクラッシュし、何が起こっているのかわかりません...

4

1 に答える 1

0

私はこれに遭遇しましたが、実際には素晴らしい「修正」はありません。問題は、ラジオ ボタンを動的に追加または挿入しようとすると、ラジオ ボタンが適切にグループ化されないことです。私が思いつく最善の回避策は、MenuBar クラスに追加して Servers メニューを再作成するこのメソッドです。

def setServers(self):
  menu = Menus['Servers']
  while menu.GetMenuItemCount() > 2:
    menu.RemoveItem(menu.FindItemByPosition(2))
  menu.AppendSeparator()
  servers = Config.getValueList('rpcservers', ['hostname', 'port', 'state'])
  for s in servers:
    id = wx.NewId() #@ReservedAssignment
    evtname = 'S%s:%s' % (s['hostname'], s['port'])
    connection = '%s:%s' % (s['hostname'], s['port'])
    menu.Append(id, connection, s['description'], kind = wx.ITEM_RADIO)
    if s['state'] == 'inuse':
      menu.Check(id, True)

直接関係のないコードもありますが (申し訳ありませんが、簡単にコピーして貼り付けてください)、ここでの考え方は、ラジオ ボタンである要素はすべてこのメニューの下部にあるということです。セパレーターとすべての新しいラジオ ボタンを追加する前に、すべての要素とセパレーターを削除します。この方法でそれらを再作成することで、新しく追加されたラジオ ボタンがその兄弟に関連していないというバグを回避することができます。うまくいけば、それは役に立ちます。説明が必要な場合はお知らせください。

于 2012-07-16T00:59:54.703 に答える