Как получить bytearray из виджета записи Tkinter - PullRequest
2 голосов
/ 09 мая 2019

Мне нужен инструмент для выдачи команд на устройство 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 ]

1 голос
/ 09 мая 2019

Следующее работает для ВСЕХ символов, включая \n, \r, \t и \x00 - \xff

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

0 голосов
/ 18 июня 2019

Попробуйте этот код:

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

Это оценивает содержимое записи как байтовый литерал. Обратите внимание, что требуется " для экранирования как \".

...