小编jaw*_*jaw的帖子

带自动和自定义滚动的Python Tkinter文本小部件

我写了一个简单的基于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)

python text tkinter scrollbar autoscroll

6
推荐指数
1
解决办法
1万
查看次数

eunit:如何测试一个简单的过程?

我正在编写一个模块的测试,该模块在一个简单的过程中运行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)

testing erlang process eunit

5
推荐指数
1
解决办法
814
查看次数

是否有内置的 Windows 命令行编辑器?

当我通过 PowerShell 连接到 64 位 Windows 服务器时,是否有一些内置的命令行工具允许文本编辑(假设我不能/不想安装软件)?

例如,对于 Linux,我可以预期vi几乎每个系统上都会安装它。对于旧的 DOS/Windows 版本,曾经有过,edit.exe但现在似乎已经不存在了。

windows powershell text-editor

5
推荐指数
1
解决办法
5281
查看次数

Tesseract JS 识别数字的问题

我正在使用 Tesseract JS(v2.1.0 和 Tesseract v4.1.1)来识别经过大量预处理(降噪、黑/白)的扫描图像中的数字(一位或多位数字),并且知道数字在哪里。

但是,当我运行识别时,经常无法正确识别两位数,例如:

在此输入图像描述

在此示例中,“11”被识别为“1”。

在图片中,你可以看到

  • 传递到 Tesseract 的图像(黑/白)
  • 传递rectangle给 Tesseract 的彩色矩形仅在该矩形中识别(但在识别后添加)
  • 左下角青色的识别数字

到目前为止我尝试过的:

  • 起初,图像是黑底白字,我通过反转图像来改变它。这大大提高了准确性。
  • 然后我读到,Tesseract 需要在文本周围有一个边框,所以我在彩色矩形所在的位置添加了一个黑色边框,但这并没有改变任何东西。
  • A 还切换到旧的引擎模式,因为这应该工作得更好。
  • 我添加了字符白名单

有什么可以改变选项或预处理来改善这一点吗?

这是代码(部分):

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)

javascript ocr tesseract

5
推荐指数
0
解决办法
1361
查看次数