wxpython - 有没有办法从 wxPython 中的事件中获取按钮或菜单项对象?
问题描述
我想做的是将单个功能绑定到多个按钮或菜单项,并让功能根据选择的菜单项做出决定。例如:
import wx
class TinkerFrame( wx.Frame ):
def __init__(self):
super().__init__(parent=None, title='Sandbox')
self.panel = wx.Panel(self)
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.buttons = {}
self.buttons['one'] = wx.Button(self.panel, label='Button 1')
self.buttons['one'].Bind( wx.EVT_BUTTON, self.buttonPressed)
self.buttons['two'] = wx.Button(self.panel, label='Button 2')
self.buttons['two'].Bind( wx.EVT_BUTTON, self.buttonPressed)
self.buttons['three'] = wx.Button(self.panel, label='Button 3' )
self.buttons['three'].Bind( wx.EVT_BUTTON, self.buttonPressed)
for thisbutton in self.buttons:
self.sizer.Add( self.buttons[thisbutton], 0, wx.ALL | wx.CENTER, 5 )
self.panel.SetSizer(self.sizer)
self.Show()
def buttonPressed(self, event):
thebuttonpressed = False # <---- THIS IS WHAT I'M LOOKING FOR
if thebuttonpressed == self.buttons['one']:
print( 'You pressed button 1' )
elif thebuttonpressed == self.buttons['two']:
print( 'You pressed button 2' )
elif thebuttonpressed == self.buttons['three']:
print( 'You pressed button 3' )
else:
print( 'I cannot figure out which button you pressed.' )
if __name__ == '__main__':
app = wx.App()
frame = TinkerFrame()
app.MainLoop()
有没有办法做到这一点?我似乎无法从事件本身中提取任何信息,但我显然不知道我在做什么,所以我希望它在某个地方。
更新:将行更改为:
thebuttonpressed = event.getEventObect()
结果是:
AttributeError: 'CommandEvent' object has no attribute 'getEventObject'
解决方案
thebuttonpressed = event.GetEventObject()
如果您包含 j ...
解决方案
您可以使用wx.Event.GetEventObject()
,注意方法名称中的大写G
。
推荐阅读
- amazon-web-services - 我应如何公开 S3 端点以供客户端加载文件
- python - CS50 DNA 适用于 small.csv 但不适用于大型
- python - Unable to make FuncAnimation work in a Class
- html - 你知道为什么我的动画方法不适用于顶级属性吗?
- c++ - C++ 如果这些函数在构造函数中传递,我如何使用带有自定义哈希和比较的 unordered_map 作为成员变量?
- assembly - 如何在 nasm 汇编程序(x64)中清除/归零变量?
- c# - C# UDPClient 类中的 Recieve 和 BeginRecieve 有什么区别?
- c++ - Nothrow 不工作,即使有正确的标题?(GCC C++)
- cmake - CMake:除了构建目标之外还需要构建文件
- rust - 尝试从 GTK-RS 应用程序的事件处理程序中添加到 `gtk::ListBox` 时似乎没有任何反应