我在wxpython中创建了一个gui。我尝试使用wx.EVT_KEY_DOWN。当我按下一个键时,我想知道该键是否更改了messageTxt(不是诸如右键,Shift,Alt等键)。我在evt.Skip()之前和之后打印messageTxt,但是它没有变化,只有在第二个字符中我才能看到最后的变化。有人知道如何在evt.Skip()之后获得新的messageTxt?到此为止,我可以比较跳过之前和之后的文本,并得到有变化的结果。这是一些解释问题的代码。
import wx
from wx.stc import StyledTextCtrl
def On_KeyDown(evt):
x, y = messageTxt.GetSelection()
# If something is selected, de-select it
if x != y:
messageTxt.SetEmptySelection(y)
else:
print("Before skipping", messageTxt.GetText())
evt.Skip()
print("After skipping", messageTxt.GetText())
app = wx.App()
frame = wx.Frame(None, -1, title='2', pos=(0, 0), size=(500, 500))
frame.Show(True)
messageTxt = StyledTextCtrl(frame, id=wx.ID_ANY, pos=(0, 0), size=(100 * 3, 100),
style=wx.TE_MULTILINE, name="File")
messageTxt.Bind(wx.EVT_KEY_DOWN, On_KeyDown)
app.SetTopWindow(frame)
app.MainLoop()
您的问题是EVT_KEY_DOWN
是工作。按下钥匙事件发生在识别钥匙本身之前。您应该检查EVT_KEY_UP
,然后测试special
键。
import wx
from wx.stc import StyledTextCtrl
def On_KeyUp(evt):
x, y = messageTxt.GetSelection()
# If something is selected, de-select it
if x != y:
messageTxt.SetEmptySelection(y)
else:
print("Before skipping", messageTxt.GetText())
evt.Skip()
print("After skipping", messageTxt.GetText())
k = evt.GetKeyCode()
if k in (wx.WXK_SHIFT,wx.WXK_ALT,wx.WXK_CONTROL,wx.WXK_DOWN):
print('Special key')
app = wx.App()
frame = wx.Frame(None, -1, title='2', pos=(0, 0), size=(500, 500))
frame.Show(True)
messageTxt = StyledTextCtrl(frame, id=wx.ID_ANY, pos=(0, 0), size=(100 * 3, 100),
style=wx.TE_MULTILINE, name="File")
messageTxt.Bind(wx.EVT_KEY_UP, On_KeyUp)
app.SetTopWindow(frame)
app.MainLoop()