我写了一个简单的基于Tkinter的Python应用程序,它从串行连接读取文本并将其添加到窗口,特别是文本小部件.
经过大量的调整和一些非常奇怪的例外,这是有效的.然后我通过这样做添加了自动滚动:
self.text.insert(END, str(parsed_line))
self.text.yview(END)
Run Code Online (Sandbox Code Playgroud)
这些行在一个线程中运行.线程在从串行连接读取时阻塞,分割行,然后将所有行添加到窗口小部件.
这也有效.然后我想允许用户滚动,这应该禁用自动滚动,直到用户滚动回到底部.
我发现这个 Stop Text小部件在内容被更改时滚动 似乎是相关的.特别是,我尝试了DuckAssasin评论中的代码:
if self.myWidgetScrollbar.get() == 1.0:
self.myWidget.yview(END)
Run Code Online (Sandbox Code Playgroud)
我也试过.get()[1]这实际上是我想要的元素(底部位置).但是,这会崩溃,但有以下异常:
Traceback (most recent call last):
File "transformer-gui.py", line 119, in run
pos = self.scrollbar.get()[1]
File "C:\Python26\lib\lib-tk\Tkinter.py", line 2809, in get
return self._getdoubles(self.tk.call(self._w, 'get'))
File "C:\Python26\lib\lib-tk\Tkinter.py", line 1028, in _getdoubles
return tuple(map(getdouble, self.tk.splitlist(string)))
ValueError: invalid literal for float(): None
Run Code Online (Sandbox Code Playgroud)
似乎tkinter某处返回None,然后将其解析为float.我在某处读到,例如,如果请求的位置不可见,文本小部件的索引方法有时会返回None.
希望有人可以帮我解决这个问题!
[编辑]
好的,我已经组装了一个演示脚本,可以在我的Win XP机器上重现这个问题:
import re,sys,time
from Tkinter import *
import Tkinter
import threading
import traceback
class ReaderThread(threading.Thread):
def __init__(self, text, scrollbar): …Run Code Online (Sandbox Code Playgroud) 我正在编写一个模块的测试,该模块在一个简单的过程中运行spawn_link(?MODULE, init, [self()]).
在我的eunit测试中,我定义了一个设置和拆卸功能以及一组测试生成器.
all_tests_test_() ->
{inorder, {
foreach,
fun setup/0,
fun teardown/1,
[
fun my_test/1
]}
}.
Run Code Online (Sandbox Code Playgroud)
设置乐趣创建了测试过程:
setup() ->
{ok, Pid} = protocol:start_link(),
process_flag(trap_exit,true),
error_logger:info_msg("[~p] Setting up process ~p~n", [self(), Pid]),
Pid.
Run Code Online (Sandbox Code Playgroud)
测试看起来像这样:
my_test(Pid) ->
[ fun() ->
error_logger:info_msg("[~p] Sending to ~p~n", [self(), Pid]),
Pid ! something,
receive
Msg -> ?assertMatch(expected_result, Msg)
after
500 -> ?assert(false)
end
end ].
Run Code Online (Sandbox Code Playgroud)
我的大多数模块都是gen_server但是为此我认为没有所有gen_server样板代码会更容易...
测试的输出如下所示:
=INFO REPORT==== 31-Mar-2014::21:20:12 ===
[<0.117.0>] Setting up process <0.122.0>
=INFO REPORT==== 31-Mar-2014::21:20:12 ===
[<0.124.0>] Sending …Run Code Online (Sandbox Code Playgroud) 当我通过 PowerShell 连接到 64 位 Windows 服务器时,是否有一些内置的命令行工具允许文本编辑(假设我不能/不想安装软件)?
例如,对于 Linux,我可以预期vi几乎每个系统上都会安装它。对于旧的 DOS/Windows 版本,曾经有过,edit.exe但现在似乎已经不存在了。
我正在使用 Tesseract JS(v2.1.0 和 Tesseract v4.1.1)来识别经过大量预处理(降噪、黑/白)的扫描图像中的数字(一位或多位数字),并且知道数字在哪里。
但是,当我运行识别时,经常无法正确识别两位数,例如:
在此示例中,“11”被识别为“1”。
在图片中,你可以看到
rectangle给 Tesseract 的彩色矩形仅在该矩形中识别(但在识别后添加)到目前为止我尝试过的:
有什么可以改变选项或预处理来改善这一点吗?
这是代码(部分):
const scheduler = Tesseract.createScheduler();
const workers = createWorkers(16);
const canvasElement = document.getElementById('detected-numbers');
await recognizeNumbers(scheduler, workers, canvasElement, rowSpecNumbers, colSpecNumbers);
async function recognizeNumbers(scheduler, workers, canvasElement, rowSpecNumbers, colSpecNumbers) {
for (const worker of workers) {
await worker.load();
await worker.loadLanguage('eng');
await worker.initialize('eng');
await worker.setParameters({
tessedit_ocr_engine_mode: Tesseract.TESSERACT_ONLY,
tessedit_char_whitelist: '0123456789',
tessedit_pageseg_mode: Tesseract.SINGLE_WORD
})
scheduler.addWorker(worker);
}
await Promise.all(rowSpecNumbers
.flat()
.map(number …Run Code Online (Sandbox Code Playgroud) autoscroll ×1
erlang ×1
eunit ×1
javascript ×1
ocr ×1
powershell ×1
process ×1
python ×1
scrollbar ×1
tesseract ×1
testing ×1
text ×1
text-editor ×1
tkinter ×1
windows ×1