LINUX.ORG.RU

Написание эмулятора терминала на Qt 5

 , ,


0

2

Всем привет! Собственно, сабж. Хотел чисто ради обучения написать эмулятор терминала на Qt 5, но нигде в интернете не могу найти примеры. Может кто подскажет? Сейчас изучаю Qt 5 и PyQt 5, и вот загорелось написать эмулятор терминала.

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

Но да - а нужна ли полноценная эмуляция терминала? А то вдруг хватит и запуска sh -i и передачи вводимого в стандартный ввод. Но не зная задачи - не гарантирую, конечно.

alex4321
()

Думаю стоит начать с изучения существующих терминалов.

RazrFalcon ★★★★★
()

Не благодари

import os
import sys
import subprocess
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from subprocess import Popen, PIPE, STDOUT
 
def main(): 
    app = QApplication(sys.argv) 
    w = MyWindow() 
    w.show() 
    sys.exit(app.exec_()) 
 
class MyWindow(QWidget): 
    def __init__(self, *args): 
        QWidget.__init__(self, *args) 
 
        # create objects
        label = QLabel(self.tr("Enter command and press Return"))
        self.le = QLineEdit()
        self.te = QTextEdit()
        self.te.setCurrentFont(QFont("Monospace"))
        self.te.setFontPointSize(9)

        # layout
        layout = QVBoxLayout(self)
        layout.addWidget(label)
        layout.addWidget(self.le)
        layout.addWidget(self.te)
        self.setLayout(layout) 

        # create connection
        self.connect(self.le, SIGNAL("returnPressed(void)"),
                     self.run_command)

    def run_command(self):
        cmd = str(self.le.text())
        p = Popen(cmd.split(), stdin=PIPE, stdout=PIPE, stderr=STDOUT)
        stdouterr, err = p.communicate(b"input data that is passed to subprocess' stdin")
        self.te.setText(stdouterr.decode("utf-8"))
  
if __name__ == "__main__": 
    main()

На Qt5 сам портируешь, окда?

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: Не благодари от EXL

Хороший пример, спасибо. Осталось на PyQt 5 его адаптировать.

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

Спасибо, кажется это то, что нужно. Но у меня нубский вопрос - как сишную либу прикрутить к PyQt? Если буду писать на Python 3

Sunderland93 ★★★★★
() автор топика
Ответ на: Не благодари от EXL

Это не совсем эмулятор терминала. Вернее, совсем не.

Более того, эмулятор терминала вообще не заниается вот этим:

 def run_command(self):
        cmd = str(self.le.text())
        p = Popen(cmd.split(), stdin=PIPE, stdout=PIPE, stderr=STDOUT)
        stdouterr, err = p.communicate(b"input data that is passed to subprocess' stdin")
        self.te.setText(stdouterr.decode("utf-8"))
yoghurt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.