如何在Tkinter应用程序中启用对表情符号的支持?

如何在Tkinter应用程序中启用对表情符号的支持?,第1张

如何在Tkinter应用程序中启用对表情符号的支持?

您在这里遇到多个问题,但我不确定您遇到的问题是什么,所以我将尽力介绍所有问题。


首先,如何“字符串化”字符串?

您需要准确定义这意味着什么—您将什么输入映射到什么输出,如果

:8
是输入,则意味着
80:80
应该将
:8
中间的字符转换为表情符号(如果不是,则表示该规则的确切含义是什么)为什么不)等

这样,实现起来就不那么困难了-
无论是循环

s.split()
还是更复杂
re.finditer
,您的规则是否需要考虑当前模式之外的上下文等,均取决于您选择的规则。

无论如何,PyPI上有许多库可以对此进行各种变化,并且您已经发现至少一个

emoji
。所以我假设这个问题已经解决。


接下来,您在哪里将其挂接到代码中?

大概,您有​​一个回调,只要用户提交聊天消息,就会触发该回调。我不知道您是如何设置的,但这并不重要,所以让我们组成一个简单的示例:

def callback(widget):    msg = widget.get()    conn.sendall(msg)    msglog.append(f'>>> {msg}')

此函数从消息输入窗口小部件中获取字符串内容,然后两者都将该字符串发送到服务器,并将其显示在消息日志窗口小部件中。因此,您所需要做的就是:

def callback(widget):    msg = widget.get()    msg = emojify(msg)    conn.sendall(msg)    msglog.append(f'>>> {msg}')

第三,您如何处理tkinter无法正确处理表情符号(和其他非BMP字符)的事实?

这部分是您链接的问题的摘要。Tkinter有一个已知的错误,直到3.7为止仍然存在,并且最著名的解决方法是丑陋的。

但是,尽管它可能 很难看 ,但并不
。该问题的答案与另一个问题有关,其中Martijn
Pieters提供了一个不错的

with_surrogates
函数,您可以仅调用已情绪化的字符串。

如果你想要的东西简单,但哈克,这将使服务器与任何东西基本没用 ,但是 一车Tkinter的客户,你可以做到这一点发送过线的消息之前:

def callback(widget):    msg = widget.get()    msg = emojify(msg)    tkmsg = with_surrogates(msg)    conn.sendall(tkmsg)    msglog.append(f'>>> {tkmsg}')

但是,更干净的解决方案是将它们作为适当的UTF-8通过网络发送,并且仅通过替代形式进行显示,都可以在这里进行:

def callback(widget):    msg = widget.get()    msg = emojify(msg)    conn.sendall(msg)    tkmsg = with_surrogates(msg)    msglog.append(f'>>> {tkmsg}')

…以及接收其他用户消息的代码中:

def on_msg(msg):    tkmsg = with_surrogates(msg)    msglog.append(tkmsg)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5645509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存