[英]wxPython: How can I listen to EVT_CHAR events on a multiline TextCtrl?
我能夠在TextCtrl上成功偵聽EVT_CHAR事件,但是當我將TextCtrl更改為使用TE_MULTILINE時,綁定似乎停止工作。
self.input = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.input.Bind(wx.EVT_CHAR, self.OnChar)
我正在使用3.0.3.dev1820 + 49a8884 osx-cocoa(phoenix)。
如何在多行TextCtrl上偵聽EVT_CHAR事件?
該代碼顯示出的問題應該工作,如果你不是在Mac上一樣 。 它在Mac上不起作用的事實是一個錯誤-我在https://github.com/wxWidgets/Phoenix/issues/804上報告了該錯誤,並且得到了維護人員的確認。
該問題將在撰寫本文時尚未發布的wxPython 4.1中修復。
如果必須使用沒有此修復程序的wxPython版本,則根據您的目標, 也許綁定到wx.EVT_TEXT
或wx.EVT_KEY_DOWN
可能就足夠了,盡管兩者的行為都與wx.EVT_CHAR
。
我無法重現您的問題。 這是我從Mouse vs Python博客修改的工作代碼。 我只將文本控件的樣式更改為wx.TE_MULTILINE,它仍然可以在Windows7(wxPython2.8.12.1)上運行。 難道是鳳凰蟲?
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Char Event Tutorial")
# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
btn = wx.TextCtrl(panel, value="", style=wx.TE_MULTILINE)
btn.Bind(wx.EVT_CHAR, self.onCharEvent)
def onCharEvent(self, event):
keycode = event.GetKeyCode()
controlDown = event.CmdDown()
altDown = event.AltDown()
shiftDown = event.ShiftDown()
print keycode
if keycode == wx.WXK_SPACE:
print "you pressed the spacebar!"
elif controlDown and altDown:
print keycode
event.Skip()
# Run the program
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyForm()
frame.Show()
app.MainLoop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.