因此,我目前有一个ScrolledPanel,其中包含许多TextCtrl,这些TextCtrl以编程方式放置在垂直BoxSizer中。我这样做的原因不仅仅是将行附加到一个大滚动的TextCtrl上,因此我还可以在TextCtrl之间添加其他控件,例如图像或样式化的展开/收缩折叠内容。
但是,这种特定的实现方式引起了一个问题-即用户无法跨多个TextCtrl选择文本。有没有一种方法可以做到快速,整洁,惯用而不是特别笨拙?我最好的选择是编写一个指针定位文本选择算法,该算法从本质上重新发明了底层本机库的文本选择内容,还是有一种更简便的方法将其他控件嵌入到多行可滚动TextCtrl中,甚至可以跨文本选择文本多个TextCtrls本机?
最佳答案
如果可能的话,我将尽量避免重新实现文本选择控件,因为这势必会很快变得非常混乱。解决此问题的另一种方法是使用单个多行textctrl小部件,并在其上附加其他小部件。这也很混乱,但事实并非如此。
您可以将其他小部件直接放置在textctrl上,只需将其他小部件直接放置在与textctrl相同的位置即可,只要其他小部件具有与textctrl相同的父级即可。只要您不与vscrollbar重叠(或者更好的是,使用style = wx.TE_NO_VSCROLLBAR完全将其删除),它就应该起作用。
接下来需要做的是预填充和间隔textctrl,以便用户仅在每个小部件位置之后才可以控制文本。您应该为每行文本设置不同的间距设置,并使用wx.TextAttr(更通用的双倍间距等)的间距选项进行设置,并根据给定应用程序的特定小部件间距进行计算。这是强制用户仅在您希望他们键入的位置键入的必要条件。
接下来,您需要为textctrl换行符设置一个绑定,以重新计算每行所需的间距。一旦弄清楚如何处理间距,这应该不会太困难。
最后,在选择文本之后,只需将所有内容重置为相同的间距,或使用其他适合您的样式,以免将文本粘贴回其他位置时不会出现尴尬的换行符。
我知道这是一个复杂的答案,但这是您提出的一个复杂问题。我认为,这是解决该问题的最有效方法,可避免彻底检查textctrl可能引起的所有错误,但它确实涉及到自动更正换行符和间距的问题,一开始可能有些棘手。
关于python - 在wxpython中的多个TextCtrls上选择文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10825597/