问题标签 [wxtextctrl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
579 浏览

wxpython - 如何获取实际显示在 wx.TextCtrl 中的字符?

我试图在单行 wx.textctrl 中强调一些特定的单词。我通过使用 GetTextExtent 计算控件中单词的位置并使用 wx.ClintDC 绘制线条来做到这一点。

当 TextCtrl 中的文本比控件的大小长时,我的问题就开始了,例如,如果用户输入 ~100 个字符,如果控件不够长,他只能看到最后 20 个字符。

我的问题是:如何获得实际显示在单行控件中的字符串?或者如何计算未显示(左侧)的文本的宽度(以像素为单位)?

单行文本控件没有滚动条。GetInsertionPoint 返回文本中插入符号的位置,但不可能将其转换为距控件左边框的实际距离(以像素为单位)。

我不想使用 TE_RICH 或 TE_RICH2 样式而不是 StyledTextCtrl 类,因为它们不支持从右到左的文本。

0 投票
2 回答
623 浏览

python - 从 wxpython 中的导入模块捕获标准输出并将其发送到 textctrl,而不阻塞 GUI

有很多与此非常相似的问题,但我找不到一个专门适用于我正在尝试做的事情的问题。

我有一个正在为其编写 GUI 的模拟(用 SimPy 编写),模拟的主要输出是文本 - 从“打印”语句到控制台。现在,我认为最简单的方法是创建一个单独的模块 GUI.py,并将我的模拟程序导入其中:

我希望所有打印语句都被 GUI 捕获并出现在 Textctrl 中,这里有无数的例子,如下所示:

我也从“开始”按钮开始我的模拟:

这一切都很好,模拟模块的输出由 TextCtrl 捕获,除了 GUI 锁定并变得无响应 - 我仍然需要它可以访问(至少要有一个“停止”按钮)。我不确定这是否是我在这里所做的创建新线程的拙劣尝试,但我认为在此过程的某个阶段将需要一个新线程。

人们建议使用 wx.CallAfter,但考虑到导入的模块不知道 wx,我不知道该怎么做,而且我也无法真正浏览整个模拟架构并将所有打印语句更改为 wx .CallAfter,任何从导入的模拟程序内部捕获 shell 的尝试都会导致程序崩溃。

有人对我如何最好地实现这一目标有任何想法吗?所以我真正需要的只是让 TextCtrl 捕获所有控制台文本,同时 GUI 保持响应,并且所有文本仅来自导入的模块。

(另外,关于停止按钮的第二个问题 - 只是杀死模拟线程是不好的形式吗?)。

谢谢,

邓肯

0 投票
1 回答
544 浏览

python - Python wxTextCtrl将tab键上的文本移动4个空格?

我有一个 wxTextCtrl,我让光标在 tab 键上向下移动 4 个空格。但是,如果我没有输入任何内容,那么当我按下制表符时,光标不会移动,文本也不会移动。

如果有人可以帮助我移动光标,即使我没有在光标前面输入任何内容,也没有在光标前面输入任何文本。

我也想在输入时让某些关键词改变颜色。如果有人可以提供帮助,我将不胜感激。

0 投票
1 回答
259 浏览

python - wxPython 在 TextCtrl 中键入关键字时,该单词会改变颜色

我有一个 wxTextCtrl,我希望能够在输入某些关键字时,在完成输入后他们的关键字会改变颜色。

0 投票
1 回答
436 浏览

c++ - 在 wxTextCtrl 中设置插入点的问题

我正在尝试在 wxWidgets(2.8.12 版)中实现自定义小部件,本质上是修改后的单行 wxTextCtrl。它需要一个文本输入,其中包含由空格分隔的两组 8 位十六进制数字,我希望控件自动处理该空格。例如,如果用户两次键入 1-8(无需按空格键),则文本控件的结果内容应为:

如果用户将光标放在第一个“3”之后并退格三次,则该空间应在编辑时自动调整,从而导致:

本质上,空间应该对用户完全透明。

在大多数情况下,我已经完成了。贴在这里的代码有点长,所以这里是一个要点:
https ://gist.github.com/036c1a90f77521a8653c

然而,有一个错误,我似乎无法修复——在输入第九位数字时,它会自动插入空格,但光标会在空格之后结束,就在第九位数字的后面。

12345678 |1

所有尝试使用wxTextCtrl::SetInsertionPoint()wxTextCtrl::SetInsertionPointEnd()没有成功,所以我作为最后的手段来到这里,希望有人能指出我做错了什么。

为了帮助测试这个小部件,我准备了一个非常快速和肮脏的应用程序,其中包含小部件:
https
://gist.github.com/cf3219eb47e2bfe85b38 或单击此处以 tarball 格式下载代码:
https://gist。 github.com/gists/cf3219eb47e2bfe85b38/download

只需运行make即可一次清理、编译和运行代码。当然,您需要安装 wxWidgets 2.8.12 才能编译。

大多数情况下,这个小部件的所有其他方面都完全按照我的意愿工作——正是这个非常大的问题使它无法正常工作。然而,我很好奇有一个小错误,虽然这不是一个主要问题,但我想在一段时间内修复它。

即使删除字符,空格也会自动处理,即使您删除了一个选择 - 但是,如果您删除的选择在第九位结束,它不会在删除后重新格式化控件的内容。

如果有人能查明原因,将不胜感激,但插入点问题显然是我主要关心的问题。

感谢任何愿意提供帮助的人,我试图提供尽可能多的信息和解释——如果我遗漏了什么,请告诉我。

0 投票
1 回答
255 浏览

wxpython - 在多行 wxTextCtrl 中替换任意行的最佳方法

GetLineText 非常适合获取特定的行,但没有对应的 SetLineText。如果存在的话,那就是我正在寻找的东西。既然它似乎没有,那么处理这个问题的最佳方法是什么?

注意:我不想每次都替换所有文本,因为我担心性能。我的用例让我为另一个控件中的每个字符更改替换一行(或行范围)。因此,让我调用 SetValue 的解决方案不是我想要的。

0 投票
2 回答
5312 浏览

python - 在 wxPython 中查找文本大小的正确方法

我有一个正在 wxPython 中开发的应用程序。应用程序的一部分在网格中创建了大量的 TextCtrl,以便为任意大的人员列表输入一周中的每一天的四个字母代码。

我设法让它工作,但我不得不做一些笨拙的事情。具体来说,我还没有找到一个很好的方法来确定一段文本有多大(以像素为单位),所以我必须猜测 TextCtrls 的大小以适合最大的(4 个字母)代码。我担心的是,如果要更改文本的大小,或者将应用程序移植到 MSW 以外的其他地方,我的布局可能会中断。

我找到的解决方案是创建一个 StaticText 对象,用 4 个大字母填充它,获取它的大小,然后 .Destroy() 它。这行得通,但它确实看起来像一个笨拙的解决方案。有没有人有更直接的方法来计算任意文本字符串在 TextCtrl 中的大小?我查看了文档并且找不到任何东西,而且我还没有看到任何与我正在尝试做的事情完全相同的例子。

一个小代码示例(显示测试方法)如下:

(+ (4,4) 部分是在控件中添加更多空间以容纳光标,并在 TextCtrl 的客户区域中添加一个小边框;这是另一件我宁愿不直接做的事情。)

0 投票
2 回答
1039 浏览

python - wxPython wx.TextCtrl 选项卡宽度

如何在 wx.TextCtrl 中将 Tab 宽度设置为 4 而不是 8?
如果不可能,可以使用什么替代 wx.TextCtrl?

注意:
mytxtCtrl.setDefaultStyle(wx.TextAttr().setTabs([...]) 不起作用!

0 投票
2 回答
2166 浏览

python - 如何在 wxTextCtrl 中动态对齐文本?

我想将选定的文本wxTextCtrl左对齐或右对齐。这是我整个程序的代码。我需要将文本向右对齐,并在单击按钮时向左对齐。

0 投票
1 回答
314 浏览

python - 在 Wx TxtCtrl 中出现错误

我正在使用马拉雅拉姆语文本编辑器。我需要在按钮单击时使用 WxPython 中的文本控件加粗选定的文本。工作环境是 Ubuntu 10.04 和 WxPython 2.8。

这是我的代码:

错误