PyQt6实战4-Terminal

news2024/12/26 23:10:45

实现一个简单的终端执行器

功能:

执行命令

显示结果

效果:

代码:

from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *
import sys
import subprocess


class JTerminal(QMainWindow):
    def __init__(self, parent=None):
        super(JTerminal, self).__init__(parent)
        self.initUI()
        self.lineEdit.returnPressed.connect(self.doCommand)
        self.working_dir = "."

    def initUI(self):
        
        self.setWindowTitle('JTerminal')
        self.setGeometry(100, 100, 800, 600)


        self.central = QWidget()
        
        self.layout = QVBoxLayout()
        
        self.textBrowser = QTextBrowser()
        fontShow = QFont("DejaVu Sans Mono", 12)
        self.textBrowser.setFont(fontShow)
        
        fontInput = QFont("Monospace", 12)
        self.lineEdit = QLineEdit()
        self.lineEdit.setFont(fontInput)
        
        self.layout.addWidget(self.textBrowser)
        self.layout.addWidget(self.lineEdit)
        
        self.central.setLayout(self.layout)
        
        self.menuBar = QMenuBar()
        self.menuBar.setGeometry(QRect(0, 0, 800, 26))
        
        self.setMenuBar(self.menuBar)
        
        self.setCentralWidget(self.central)
    
    
    def doCommand(self):
        cmd = self.lineEdit.text()
        self.lineEdit.setText("")
        
        result_pwd = subprocess.check_output("pwd", shell=True, cwd=self.working_dir)
        
        self.textBrowser.setText(self.textBrowser.toPlainText() + result_pwd.decode('utf-8') + "> " + cmd + "\n")
        
        if "cd" in cmd:
            vals = cmd.split(" ")
            if vals[1][0] == "/":
                self.working_dir = vals[1]
            else:
                self.working_dir = self.working_dir + "/" + vals[1]
            
            # subprocess.call(cmd, shell=True, cwd=self.working_dir)
            #run 依赖python 3.5, 所以需要注意,call不需要
            result = subprocess.run(cmd, shell=True, cwd=self.working_dir)
            
            # self.textBrowser.setText(self.textBrowser.toPlainText() + "\n" + cmd)
            
            result_pwd = subprocess.check_output("pwd", shell=True, cwd=self.working_dir)
            self.textBrowser.setText(self.textBrowser.toPlainText() + result_pwd.decode('utf-8'))
        
        else:
            
            try:
                result = subprocess.check_output(cmd, shell=True, cwd=self.working_dir)
                
                self.textBrowser.setText(self.textBrowser.toPlainText() + result.decode('utf-8'))
                
            except:
                self.textBrowser.setText(self.textBrowser.toPlainText() + "command not found \n")
            
        self.textBrowser.verticalScrollBar().setValue(self.textBrowser.verticalScrollBar().maximum())
        
        
        
        
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = JTerminal()
    ex.show()
    sys.exit(app.exec())
    

代码地址:

GitHub - chunlaiqingke/Tiny-Tool

公众号

代码参考项目:

GitHub - petercour/terminal-emulator-example-pyqt: Terminal emulator in pyqt, https://pythonbasics.org/pyqt/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1559589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Django开发】前后端分离美多商城项目第4篇:用户部分,1. 判断用户名是否存在【附代码文档】

美多商城项目4.0文档完整教程(附代码资料)主要内容讲述:美多商城,项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业,5.O2O--线上到线下,6.F2C--工厂到个人。项目准备,配置1. 修改set…

UniFace:深度人脸识别的统一交叉熵损失

UniFace: Unified Cross-Entropy Loss for Deep Face Recognition softmax损失 缺点:不能保证最小正样本类相似度大于最大负样本类相似度 问题:没有统一的阈值可用于将正样本与类对与负样本与类对分开 创新点 设计了用于人脸识别模型训练的UCE&#xf…

1695. 删除子数组的最大得分-力扣(滑动窗口)

给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组。删除子数组的 得分 就是子数组各元素之 和 。 返回 只删除一个 子数组可获得的 最大得分 。 如果数组 b 是数组 a 的一个连续子序列,即如果它等于 a[l],a[l1],…,a[r] &#xff0…

T-Dongle-S3开发笔记——idf事件

参考事件循环库 - ESP32 - — ESP-IDF 编程指南 v5.2 文档 (espressif.com) 事件标识符由两部分组成:事件根基 和 事件 ID。 事件根基标识独立的事件组; 事件 ID 标识组中的特定事件。 默认事件循环 默认事件循环是一种特殊循环,用于处理…

练习所学文件操作的相关函数

上上篇文章,我们介绍了文件和文件操作函数,现在我们来练习一下所学文件操作的相关函数吧! 实践出真知~ 文件的打开和关闭 我们首先练习一下文件的打开和关闭: 每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区&#xff…

数据结构(六)——图的遍历

6.3 图的遍历 6.3.1 图的广度优先遍历 ⼴度优先遍历(Breadth-First-Search, BFS)要点: 1. 找到与⼀个顶点相邻的所有顶点 2. 标记哪些顶点被访问过 3. 需要⼀个辅助队 FirstNeighbor(G,x):求图G中顶点x的第⼀个邻接点&#xff…

Windows 11 专业版 23H2 Docker Desktop 下载 安装 配置 使用

博文目录 文章目录 Docker Desktop准备系统要求 (WSL 2 backend)在 Windows 上打开 WSL 2 功能先决条件开启 WSL 2 WSL下载安装启动配置使用镜像 Image卷积 Volumes容器 Containers 命令RedisMySQLPostGreSQL Docker Desktop Overview of Docker Desktop Docker Desktop 疑难解…

SSTI 服务器端模板注入(Server-Side Template Injection)

1.Web_python_template_injection {{}}是变量包裹标识符,里面存放的是一个变量,当你输入 http://61.147.171.105:55121/{{8*8}} 执行成功,说明存在模版注入。接下来,开始想办法编代码拿到服务器的控制台权限 。 首先&#xff0c…

用于网站域名备案的服务器最便宜多少钱?30元备案5个网站

用于备案的服务器多少钱?阿里云30元3个月,腾讯云62元一年,符合ICP备案的服务器只要满足3个月时长就够用,并且一台云服务器可以备案5个网站域名或APP。云服务器吧yunfuwuqiba.com分享阿里云最便宜备案服务器价格和腾讯云ICP备案服务…

MES_ENT_STD

生产执行系统(企业标准版)MES_ENT_STD ERP_ENT_STD_59438.ieqq.ent-CSDN博客 OAMS_ENT_STD-CSDN博客

笔试——3.31腾讯笔试

整体难度尚可&#xff0c;ac了三道半&#xff0c;第四题没什么时间了没怎么看。 第一题 #include<bits/stdc.h> using namespace std;vector<vector<pair<int, int>>>arr; vector<int>visited; //res 1 white 0 int cnt 0;void dfs(int x) {if…

基于OrangePi Zero2的智能家居项目(开发阶段)

智能家居项目的软件实现 紧接上文 基于OrangePi Zero2的智能家居项目&#xff08;准备阶段&#xff09;-CSDN博客 目录 一、项目整体设计 1.1项目整体设计 1.2具体划分 二、开发工作的前期准备 1、进行分类&#xff0c;并用Makefile文件进行管理 参考&#xff1a;自己创…

pajamas 0 publish repo fst in gitee

0. 好久没有blog了&#xff0c;真的好久了&#xff0c;先交代一波 因为半年来发生了很多&#xff0c;计划有变&#xff0c;辞工作&#xff0c;出去耍&#xff0c;找工作&#xff0c;重新计划… 从半年前开始&#xff0c;就想好了&#xff0c;最近这两年应该优先会写代码 &…

一篇讲明白 Hadoop 生态的三大部件

文章目录 每日一句正能量前言01 HDFS02 Yarn03 Hive04 HBase05 Spark及Spark Streaming关于作者推荐理由后记赠书活动 每日一句正能量 黎明时怀着飞扬的心醒来&#xff0c;致谢爱的又一天&#xff0c;正午时沉醉于爱的狂喜中休憩&#xff0c;黄昏时带着感恩归家&#xff0c;然后…

python实现模糊神经网络(pytorch版)

1 理论 模糊神经网络是一种基于模糊逻辑的神经网络模型&#xff0c;其主要用于处理模糊信息和不确定性的问题。模糊神经网络可以将输入数据映射到一个模糊集合中&#xff0c;然后通过一系列的模糊规则进行求解&#xff0c;最终输出一个模糊集合。 模糊神经网络的基本原理是将…

AMD GPUs - Radeon™ PRO W7900与NVIDIA 4000系列GPU性能

文心一言 RTX 4090的性能高于AMD Radeon PRO W7900。 RTX 4090具有760亿个晶体管、16384个CUDA核心和24GB高速镁光GDDR6X显存&#xff0c;在4K分辨率的游戏中持续以超过100FPS运行。RTX 4090采用全新的DLSS 3技术&#xff0c;相比3090TI&#xff0c;性能提升可达2~4倍&#x…

CSS实现元素边框渐变动画

前言&#xff1a; 边框流动动画是一种非常常见的效果&#xff0c;能够让网页看起来更加生动有趣。通过使用 CSS3&#xff0c;我们可以轻松地实现这种动画效果。本文将介绍如何使用 CSS3 实现边框流动效果&#xff0c;下面一起来看看吧。 示例图&#xff1a;边框是动画持续变化的…

MCRNet:用于乳腺超声成像语义分割的多级上下文细化网络

MCRNet&#xff1a;用于乳腺超声成像语义分割的多级上下文细化网络 摘要引言方法 MCRNet_ Multi-level context refinement network for semantic segmentation in breast ultrasound imaging 摘要 由于对比度差、目标边界模糊和大量阴影的不利影响&#xff0c;乳腺超声成像中…

文献阅读:通过 NeuronChat 从单细胞转录组推断神经元-神经元通信

文献介绍 「文献题目」 Inferring neuron-neuron communications from single-cell transcriptomics through NeuronChat 「研究团队」 聂青&#xff08;加利福尼亚大学欧文分校&#xff09; 「发表时间」 2023-02-28 「发表期刊」 Nature Communications 「影响因子」 16.6…

mysql8 功能特点

1.查询缓存 删除了 2.secondary engine 设置&#xff1a; MySQL默认的存储引擎是InnoDB&#xff0c;而引入Secondary Engine&#xff0c;用来实现同时支持多引擎&#xff0c;在同一个MySQL Server上挂多个存储引擎&#xff0c;在支持InnoDB的同时&#xff0c;还可以把数据存放…