簡體   English   中英

wxPython:如何在多行TextCtrl上偵聽EVT_CHAR事件?

[英]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_TEXTwx.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM