Python诅咒,从屏幕读取宽字符的属性

2024-10-01 07:50:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解决的问题是获得一对chatt表示当前在某个给定位置显示的字符和关联属性

现在,当显示的字符不是宽字符(即ASCII字符)时,方法.inch将正确屏蔽结果。当显示的字符较宽时会出现问题。更确切地说,我知道如何通过.instr获取给定的字符,但是该函数不返回有关属性的任何信息

因为,据我所知,没有单独获取属性的特定函数,所以我的第一次尝试是使用.inch,删除8个低有效位,并将结果解释为属性。这似乎在某种程度上起了作用,但我仔细检查后发现,以这种方式读取没有属性的希腊字母(u"u\03b1")会返回att = 11.0000.0000,而不是0。有没有更好的方法来解决这个问题

EDIT,Python3的一个最小示例

import curses

def bin(x):
    out = ''
    while x > 0:
        out = str(x % 2) + out
        x = x // 2

    return out

def main(s):
    s.addstr(1, 1, u'\u03b1')
    s.refresh()

    chratt = s.inch(1, 1)

    att = chratt & 0xFF00

    s.addstr(2, 1, bin(att))
    s.refresh()

    while True:
        pass

curses.wrapper(main)

Tags: 方法函数bin属性maindefout字符
1条回答
网友
1楼 · 发布于 2024-10-01 07:50:39

在诅咒中,inch和instr仅用于您怀疑的ascii字符。“复杂”或“宽”字符(如utf-8中的字符)有另一个系统,如ncurses创建者之一所解释的

然而,这是一个坏消息。它们还没有在python诅咒中实现。提交了一个pull请求here,它非常接近合并(90%),所以如果您真的需要它,为什么不自己去贡献呢

如果这不是一个选项,那么您可以尝试将您对屏幕所做的所有更改存储在一个变量中,然后从中提取宽字符

相关问题 更多 >