如何从Tkinter条目小部件获取字节数组

时间:2019-05-09 08:58:51

标签: python python-3.x tkinter tkinter-entry

我需要一种将命令吐出到不需要可打印字符的telnet设备的工具,例如回车符和换行符。在python本身中,这是通过以下类似方式实现的。...

myDevice.send(b'command\n\r')

这将导致9个字节发送到设备。

我想在Tkinter输入框中输入这样的字符串。但是,Tk输入框似乎太聪明了,无法使用\,所以每次引入\ r \ n或\ x0a等时,我总是得到\\。换句话说,它总是可打印的。

我一直在不停地尝试将结果字符串转换成我需要的字符串,但是却没有喜悦。我在下面提供了一个小例子来说明问题。

from tkinter import *

def show_entry_fields():
   print(e1.get().encode())

def show_string():
    myString = b'hello\n'
    print(myString)

master = Tk()
Label(master, text="Enter string with \\n").grid(row=0)

e1 = Entry(master)
e1.insert(10,"enter with escape char")

e1.grid(row=0, column=2)

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(master, text='Show Entry', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)
Button(master, text='Show myString', command=show_string).grid(row=3, column=2, sticky=W, pady=4)

mainloop( )

在tk输入框中输入以下内容: 'hello\n'

这是印刷品的结果: b'hello\\n'

我真正想看到的是: b'hello\n'

一旦发送到设备,它就只有6个字节。

2 个答案:

答案 0 :(得分:1)

以下内容适用于所有字符,包括\n\r\t\x00 - \xff

print(e1.get().encode('latin-1').decode('unicode_escape').encode('latin-1'))

答案 1 :(得分:0)

尝试以下代码:

import ast
def show_entry_fields():
    print(ast.literal_eval(f'b"{e1.get()}"'))

这将以字节字面量评估Entry的内容。请注意,它要求"被转义为\"