LINUX.ORG.RU

Существует ли в природе цветной терминал для tkinter?

 , , , ,


0

1

Мне нужен виджет терминала для tkinter. Главное требование, чтобы он поддерживал цветной вывод.

Нашел только такой вариант, но на проверку оказалось, что он цвет не поддерживает:

https://pypi.org/project/tkterminal/
https://github.com/Saadmairaj/tkterminal

Вопрос: где взять цветной терминал?

★★★★★
Ответ на: комментарий от MKuznetsov

В принципе, я нашел как это делается:

from Tkinter import *
import os
root = Tk()
termf = Frame(root, height=400, width=500)
termf.pack(fill=BOTH, expand=YES)
wid = termf.winfo_id()
os.system('xterm -into %d -geometry 40x20 -sb &' % wid)
root.mainloop()

Но возникает два вопроса:

1. А как в этот терминал отправлять команды? Чтобы терминал не одну команду, заданную в строке запуска выполнил, а неограниченное количество по мере их поступления?

2. А как получать в Python-переменную стандартный вывод терминала?

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 3)
Ответ на: комментарий от Xintrea

Кажется, это проблема XY. Я на оба вопроса без подготовки ответить не могу, но есть ощущение, что это какой-то нездоровый подход.

Например, стандартный вывод есть у программы. У терминала его нет — скорее всего, из попытки что-то читать из терминала, даже если это возможно, нельзя будет извлечь никакую полезную информацию.

Терминал — это ведь не устройство для последовательного ввода-вывода текста, он там ещё может управляющими последовательностями разные штукенции делать, вплоть до рисования настоящей графики (в зависимости от терминала, конечно).

Отдельные программы можно запускать через модуль subprocess и перехватывать ввод и/или вывод, но тогда зачем терминал?..

emorozov
()
Ответ на: комментарий от Xintrea

ты озвучь что конкретно хочешь сделать. Задачу

пока-что «встроить терминал в Tk» это то как тебе видится её решение. То есть это метод, который первым приходит на ум

Можно чисто системно/полу-админскими методами выделить pty, объяснить про интерпретацию termcap и с ним работать. Но вестимо это не вполне то что хочешь.

Какие команды то хочешь отправлять ? sh, python ? а они должны определять консоль ?

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

По второй из ссылок в первом сообщении топика видно что оно вполне работает с цветом. А если нет, то видимо ему нужно будет поддержку цвета запилить самостоятельно. Но скорее всего у ТС проблема уровня Цветной терминал.

ei-grad ★★★★★
()
Последнее исправление: ei-grad (всего исправлений: 2)
Ответ на: комментарий от NorthernBlow

вывод сообщений принтами в терминал покрасить?

В терминал, например, будет направляться выхлоп Ansible, а он цветной. И нужно чтоб цвет сохранился.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от ei-grad

По второй из ссылок в первом сообщении топика видно что оно вполне работает с цветом.

Не работает. Цветной поток не воспринимает (спецсимволы форматирования цвета).

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

могучий гугль даёт https://github.com/martinwguy/xvi/tree/2.50/test/scripts

старое-старое, парсит esc-sequence в теги виджета «text» и заодно с ним работает

на мой взгляд, если нужен только цвет, то быстрее самому написать :-) там действительно мало кода. По сложности ровно то-же что и «вырезать esc-команды»

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от Xintrea
class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKCYAN = '\033[96m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'


print(bcolors.OKBLUE + ' Отправляю цветное сообщение в терминал ' + bcolors.ENDC + '@@@')

NorthernBlow
()
Ответ на: комментарий от MKuznetsov

в tkinter можно вставить xterm, rxvt и прочие :-) будут как родной виджет

Я решил пойти по этом пути, но у меня возникла проблема:

Tkinter+xterm. Почему терминал xterm не выводит результат работы программы?

Xintrea ★★★★★
() автор топика