저는 아치 리눅스 x86_64에서 파이썬 2.7.2와 wxPython 2.8.12.1을 사용하고 있습니다.wxPython : 메뉴 키 단축키와 동적 인 비활성화의 범위
나는 다음과 같은 예를이 방식으로 작동하고 싶습니다 :
* Shift+A
을 누르면, 포커스가 (text_A
) TextCtrl 왼쪽 때 do_A()
을 실행해야하고, Shift+B
를 눌러이 텍스트 영역에 B
를 작성해야; 또한, 오른쪽 TextCtrl (text_B
)에 포커스가있을 때
는 * Shift+A
를 눌러 그것이 텍스트 영역 A
를 작성해야하고, Shift+B
를 눌러 그것이 do_B()
실행한다 menu.foo.bar_B
사용 중지되어야한다 (그리고 menu.foo.bar_A
가능); 또한, 전혀 작동하지 않습니다 self.text_A.Bind(wx.EVT_MENU, self.handle_A, self.menu.foo.bar_A)
같은과 메뉴 이벤트에 바인딩
import wx
class Foo(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, size=(600, 480))
self.init_menu()
self.init_text()
self.Centre()
self.Show(True)
def init_menu(self):
self.menu = wx.MenuBar()
self.SetMenuBar(self.menu)
self.menu.foo = wx.Menu()
self.menu.Append(self.menu.foo, "&Foo")
self.menu.foo.bar_A = self.menu.foo.Append(wx.ID_ANY, "Bar&A\tShift+A")
self.menu.foo.bar_B = self.menu.foo.Append(wx.ID_ANY, "Bar&B\tShift+B")
self.Bind(wx.EVT_MENU, self.handle_A, self.menu.foo.bar_A)
self.Bind(wx.EVT_MENU, self.handle_B, self.menu.foo.bar_B)
def init_text(self):
self.box = wx.BoxSizer(wx.HORIZONTAL)
self.SetSizer(self.box)
self.text_A = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.text_B = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.box.Add(self.text_A, 1, flag=wx.EXPAND)
self.box.Add(self.text_B, 1, flag=wx.EXPAND)
def handle_A(self, event):
print('A')
def handle_B(self, event):
print('B')
app = wx.App()
Foo()
app.MainLoop()
menu.foo.bar_A
비활성화해야합니다 (그리고 menu.foo.bar_B
사용).
wx.EVT_KILL_FOCUS
및 wx.EVT_SET_FOCUS
을 사용하여 메뉴 항목을 바인딩/바인딩 해제하고, 바로 가기 키를 설정/재설정하고 메뉴 항목을 활성화/비활성화 할 수 있습니까? 큰 응용 프로그램에서는 복잡해 보입니다. 일반적으로 wxPython 응용 프로그램이 메뉴 바로 가기 키의 범위를 제한하고 메뉴 항목을 동적으로 활성화/비활성화하는 적절한 방법 (가장 자주 깨끗하고 깔끔한 방식)을 알고 싶습니다.
감사합니다.
위의 모든 참조에 대해 실제로 내가하고 싶은 부분에 대한 가장 흥미로운 부분은 문서 끝에 wxUpdateUIEvent를 언급하는 * Update * 부분 일 것입니다. 제가 할 수있는 좋은 사례를 알고 있습니까? 그것을 사용하는 법을 배워라. 간단한 Google 검색 후에 나는 많은 것을 찾을 수 없었습니다 ... – kynikos
나는 그것을 그렇게 많이 사용하지 않았습니다. wxPython 데모 또는 메일 링리스트에서 가져온 것 같습니다. 부담없이 물어보십시오. –