Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在wxpython中的多个TextCtrl上选择文本_Python_Wxpython_Wx.textctrl - Fatal编程技术网

在wxpython中的多个TextCtrl上选择文本

在wxpython中的多个TextCtrl上选择文本,python,wxpython,wx.textctrl,Python,Wxpython,Wx.textctrl,因此,我目前有一个滚动面板,其中包含许多TextCtrl,这些TextCtrl以编程方式放置在垂直BoxSizer中。我之所以这样做,而不是仅仅在一个大的滚动文本Ctrl中添加行,是为了在文本Ctrl之间添加其他控件,例如图像或样式化的展开/收缩折叠内容 然而,这个特定的实现导致了一个问题——即用户不可能跨多个TextCtrl选择文本。有没有一种方法可以做到快速、干净、惯用,而不是特别笨拙?是我编写指针位置文本选择算法的最佳选择,该算法本质上是对底层本机库的文本选择内容进行重新设计,还是有更简单

因此,我目前有一个滚动面板,其中包含许多TextCtrl,这些TextCtrl以编程方式放置在垂直BoxSizer中。我之所以这样做,而不是仅仅在一个大的滚动文本Ctrl中添加行,是为了在文本Ctrl之间添加其他控件,例如图像或样式化的展开/收缩折叠内容


然而,这个特定的实现导致了一个问题——即用户不可能跨多个TextCtrl选择文本。有没有一种方法可以做到快速、干净、惯用,而不是特别笨拙?是我编写指针位置文本选择算法的最佳选择,该算法本质上是对底层本机库的文本选择内容进行重新设计,还是有更简单的方法将其他控件嵌入多行可滚动的TextCtrl,或者甚至可以在多个TextCtrl中以本机方式选择文本?

如果可能的话,我不会尝试重新实现文本选择控件,因为这肯定会很快变得非常混乱。解决此问题的另一种方法是使用一个多行textctrl小部件,并在其上附加其他小部件。这也很混乱,但不那么混乱

只要其他小部件与textctrl具有相同的父项,就可以通过将它们直接放置在textctrl的相同位置,将它们放置在textctrl上。只要不与vscrollbar重叠(或者更好的是,使用style=wx.TE_NO_vscrollbar将其完全删除),这应该是可行的

接下来需要做的事情是预先填充文本并将其隔开,这样用户就只能在每个小部件的位置之后控制文本。您应该让每行文本具有不同的间距设置,并使用wx.texttr(更通用的双间距版本等)的间距选项进行设置,该选项是根据您为应用程序指定的特定小部件间距计算的。这是必须的,以强制用户仅键入您希望他们准确键入的位置

接下来,您需要设置与textctrl换行符的绑定,以重新计算每行所需的间距。一旦你知道了如何处理间距,这应该不会太难

最后,在选择文本后,只需将所有内容重置为相同的间距,或其他适合您的方式,这样在将其粘贴回其他位置时不会出现尴尬的换行


我知道这是一个复杂的答案,但这是你提出的一个复杂问题。我相信这是解决这个问题的最有效的方法,并且避免了因彻底检修textctrl而产生的所有错误,但它确实涉及到自动更正换行符和间距,这在一开始可能有点棘手。

谢谢!在经历了一段时间之后(我只是勉强接受了不能选择文本的问题),我认为您的方法可能是最好的方法,可以使用一些缓存,以便对特别大的文本执行此操作(我将不得不这样做)不会太慢。