【发布时间】:2015-08-03 19:13:05
【问题描述】:
所以在普通的 python 脚本中你可以这样做:
def func():
i = 1
return i
i = func()
一般来说,另一个 python 程序可以导入包含这个的文件,然后在他们的程序中说 i = func(),他们就会得到 i 的值。
现在我想做类似的事情,但是当用户按下按钮或从 GUI 激活事件处理程序时,我需要这样做。比如:
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Pressing dem keyz")
# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
self.btn = wx.ToggleButton(panel, label="TOGGLE")
self.btn2 = wx.ToggleButton(panel, label="TOGGLE 2", pos = (85,0))
self.btn.Bind(wx.EVT_CHAR_HOOK, self.onKeyPress)
self.btn2.Bind(wx.EVT_CHAR_HOOK, self.onKeyPress)
def onKeyPress(self, event):
space = False
keycode = event.GetKeyCode()
print keycode
if keycode == ord(' '):
print "SPACEBAR!"
space = True
self.btn.SetValue(space)
if space == True:
print "Lemme return i please"
i = 1
print i
return i #ALSO PART OF WHAT I WANT TO DO
elif keycode == wx.WXK_RETURN:
self.btn
elif keycode == wx.WXK_LEFT:
self.btn2
print 'YOU MOVED LEFT'
elif keycode == wx.WXK_RIGHT:
self.btn
print 'YOU MOVED RIGHT'
elif keycode == wx.WXK_UP:
print 'YOU MOVED UP'
elif keycode == wx.WXK_DOWN:
print 'YOU MOVED DOWN'
elif keycode == wx.WXK_ESCAPE:
self.Destroy()
#NOW HERE'S THE PART THAT I WANT TO IMPLEMENT
return keycode
#I do not need the keycode necessarily but I want to do something similar to this along with the |return i| above
# Run the program
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm()
frame.Show()
app.MainLoop()
我看过这些 Call functions from within a wxPython event handler , Return value from wxpython main frame 但它们并没有真正解决我想在这里做的事情
【问题讨论】:
-
我问是因为你不能真正调用这些事件处理函数之一,除非你将它们绑定到一个按钮,如果一个程序要调用这个函数,除非它也将其绑定到一个按钮。
-
你能提供更多的上下文吗?想要这样做的用例是什么?
-
@JHarris 好吧,也许我只是没有正确地给出下面 Dalen 的答案,但重点是能够以变量形式从事件处理程序中获取信息,重点是如果您修改了由事件触发的某些内容(例如按下了切换按钮,并且我将该处理程序中的变量设置为 True)并且我想取回已修改的内容(所以我想知道该变量是否为 True与否)然后在某个其他功能中使用它来休闲(比如更改该按钮的背景颜色)
-
我知道我上面所说的可以以更好的方式完成(而且一直如此),但我只是用它作为一个简单的例子。
标签: python event-handling wxpython return-value keyboard-events