Wxpython wxWidgets:如何更改StyledTextCtrl中的插入符号样式(向闪烁体发送命令)

Wxpython wxWidgets:如何更改StyledTextCtrl中的插入符号样式(向闪烁体发送命令),wxpython,wxwidgets,caret,scintilla,Wxpython,Wxwidgets,Caret,Scintilla,wxWidgets有wxStyledTextCtrl,据我所知,它在幕后使用闪烁体 我对斯金特拉API了解不多,但我有一种想法,您可以向它发出命令 特别是,我想使光标具有块样式,我在Notepad++中找到了以下代码段: execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK) 我想在StyledTextCtrl中执行同样的操作,但我不知道如何在场景后面访问Scinilla控件 我该怎么做 另外,我在wxPython工作,但我想这没什么区别 更新: 在WXWID

wxWidgets有wxStyledTextCtrl,据我所知,它在幕后使用闪烁体

我对斯金特拉API了解不多,但我有一种想法,您可以向它发出命令

特别是,我想使光标具有块样式,我在Notepad++中找到了以下代码段:

execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)
我想在StyledTextCtrl中执行同样的操作,但我不知道如何在场景后面访问Scinilla控件

我该怎么做

另外,我在wxPython工作,但我想这没什么区别

更新:

在WXWIDGET C++源代码中挖掘后,发现大部分函数只调用<代码> SDENMSG < /C> >,例如:

// Get the time in milliseconds that the caret is on and off. 0 = steady on.
void wxStyledTextCtrl::SetCaretPeriod(int periodMilliseconds)
{
    SendMsg(2076, periodMilliseconds, 0);
}
所以我想这就是如何向底层的闪烁体组件发送命令

所以,我得到了我需要的价值观

#define CARETSTYLE_INVISIBLE 0 #define CARETSTYLE_LINE 1 #define CARETSTYLE_BLOCK 2 #define SCI_SETCARETSTYLE 2512 #define SCI_GETCARETSTYLE 2513 但似乎没有任何效果

原因可能是什么?我如何调试它?

试试看

self.SendMsg(msg=2512, lp=2)

您不需要编写所使用的wxPython/wxWidgets的版本,但我假设它是2.8.x版本。其中包含闪烁版本1.70,而SVN主干(即将作为wxWidgets版本2.9发布)具有闪烁版本1.75。闪烁头文件上的grep显示SCI_GETCARETSTYLE和SCI_SETCARETSTYLE仅在wxWidgets主干中,因此在wxWidgets 2.8中根本不会处理这些消息

self.SendMsg(msg=2512, lp=2)