pyqt5实现---GUI界面实时显示控制台输出

GUI界面实时显示控制台输出

将cmd的输出(如下图),实时传到GUI界面进行输出:
在这里插入图片描述

效果展示:
在这里插入图片描述
代码:

from time import sleep
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import qtawesome
from PyQt5.QtCore import QObject, pyqtSignal, QEventLoop, QTimer, QThread, QTime
from PyQt5.QtGui import QTextCursor
from PyQt5.QtWidgets import QTextEdit

class MainUi(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()
        self.th = MyThread()
        self.th.signalForText.connect(self.onUpdateText)
        sys.stdout = self.th

    def onUpdateText(self,text):
        cursor = self.process.textCursor()
        cursor.movePosition(QTextCursor.End)
        cursor.insertText(text)
        self.process.setTextCursor(cursor)
        self.process.ensureCursorVisible()

    def init_ui(self):
        self.setFixedSize(800, 400)
        self.main_widget = QtWidgets.QWidget()  # 创建窗口主部件
        self.main_layout = QtWidgets.QGridLayout()  # 创建主部件的网格布局
        self.main_widget.setLayout(self.main_layout)  # 设置窗口主部件布局为网格布局

        self.widget = QtWidgets.QWidget()  
        self.widget.setObjectName('widget')
        self.layout = QtWidgets.QGridLayout()
        self.widget.setLayout(self.layout)  # 设置部件布局为网格

        self.main_layout.addWidget(self.widget, 0, 2, 12, 10)  
        self.setCentralWidget(self.main_widget)  # 设置窗口主部件
        
        self.bar_widget = QtWidgets.QWidget()  # 顶部搜索框部件
        self.bar_layout = QtWidgets.QGridLayout()  # 顶部搜索框网格布局
        self.bar_widget.setLayout(self.bar_layout)
        self.search_button = QtWidgets.QPushButton(qtawesome.icon('fa.comment', color='red'), "搜索")
        self.search_button.clicked.connect(self.genMastClicked)
        self.search_button.setObjectName('button')
        self.search_button.setFont(qtawesome.font('fa', 16))
        self.bar_widget_search_input = QtWidgets.QLineEdit()  # 搜索框
        self.bar_widget_search_input.setPlaceholderText("输入搜索内容")

        self.bar_layout.addWidget(self.search_button, 0, 0, 1, 1)
        self.bar_layout.addWidget(self.bar_widget_search_input, 0, 1, 1, 8)

        self.layout.addWidget(self.bar_widget, 0, 0, 1, 9)

        self.recommend_label = QtWidgets.QLabel("进程显示:")
        self.recommend_label.setObjectName('lable')

        self.recommend_widget = QtWidgets.QWidget()
        self.recommend_layout = QtWidgets.QGridLayout()
        self.recommend_widget.setLayout(self.recommend_layout)

        self.process = QTextEdit(self, readOnly=True)
        self.process.ensureCursorVisible()
        self.process.setLineWrapColumnOrWidth(800)
        self.process.setLineWrapMode(QTextEdit.FixedPixelWidth)
        self.process.setFixedWidth(500)
        self.process.setFixedHeight(250)
        self.process.move(30, 50)

        self.recommend_layout.addWidget(self.process, 0, 1)
        self.layout.addWidget(self.recommend_label, 1, 0, 1, 9)
        self.layout.addWidget(self.recommend_widget, 2, 0, 2, 9)

        #使用QSS和部件属性美化窗口部件
        self.bar_widget_search_input.setStyleSheet(
            '''QLineEdit{
                    border:1px solid gray;
                    width:300px;
                    border-radius:10px;
                    padding:2px 4px;
            }''')
        self.widget.setStyleSheet('''
            QWidget#widget{
                color:#232C51;
                background:white;
                border-top:1px solid darkGray;
                border-bottom:1px solid darkGray;
                border-right:1px solid darkGray;
            }
            QLabel#lable{
                border:none;
                font-size:16px;
                font-weight:700;
                font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
            }
            QPushButton#button:hover{border-left:4px solid red;font-weight:700;}
        ''')

    def search(self):
        try:
            self.t = MyThread()
            self.t.start()
        except Exception as e:
            raise e

    def genMastClicked(self):
        """Runs the main function."""
        print('Running...')
        self.search()

        loop = QEventLoop()
        QTimer.singleShot(2000, loop.quit)
        loop.exec_()

    def closeEvent(self, event):
        """Shuts down application on close."""
        # Return stdout to defaults.
        sys.stdout = sys.__stdout__
        super().closeEvent(event)

QThread用来实现多线程

class MyThread(QThread):
    signalForText = pyqtSignal(str)

    def __init__(self,data=None, parent=None):
        super(MyThread, self).__init__(parent)
        self.data = data

    def write(self, text):
        self.signalForText.emit(str(text))  # 发射信号

    def run(self):
        # 演示代码
        for i in range(5):
            print(i)
            sleep(1)
        print("End")

最后主函数启动

def main():
    app = QtWidgets.QApplication(sys.argv)
    app.aboutToQuit.connect(app.deleteLater)
    gui = MainUi()
    gui.show()

    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
  • 22
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
要搭建YOLOv5的可视化界面,您可以使用PyQt库来创建GUI应用程序。下面是一个简单的例子,演示了如何使用PyQt搭建YOLOv5的可视化界面。 首先,您需要安装必要的库和YOLOv5。假设您已经安装了YOLOv5并且在Python中导入了它。接下来,安装PyQt库: ``` pip install PyQt5 ``` 然后,您可以使用以下代码创建一个简单的GUI应用程序,该应用程序将YOLOv5应用于图像并显示结果: ``` python import sys from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QLabel, QPushButton, QFileDialog from yolov5.detect import detect_image # 假设您已经导入了YOLOv5 class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建主窗口 self.setWindowTitle("YOLOv5可视化界面") self.setGeometry(100, 100, 800, 600) # 创建中心窗口 self.centralWidget = QWidget() self.setCentralWidget(self.centralWidget) # 创建标签和按钮 self.imageLabel = QLabel(self.centralWidget) self.imageLabel.setGeometry(50, 50, 500, 500) self.imageLabel.setAlignment(Qt.AlignCenter) self.openButton = QPushButton("打开图片", self.centralWidget) self.openButton.setGeometry(600, 50, 120, 40) self.openButton.clicked.connect(self.open_image) self.detectButton = QPushButton("检测", self.centralWidget) self.detectButton.setGeometry(600, 150, 120, 40) self.detectButton.clicked.connect(self.detect_image) # 初始化图像 self.image = None def open_image(self): # 打开文件对话框 options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog fileName, _ = QFileDialog.getOpenFileName(self,"打开图片", "","Images (*.png *.xpm *.jpg *.bmp)", options=options) if fileName: # 加载图像并显示 self.image = QPixmap(fileName) self.imageLabel.setPixmap(self.image) self.imageLabel.setScaledContents(True) def detect_image(self): if self.image is not None: # 将图像转换为numpy数组并应用YOLOv5 result = detect_image(self.image.toImage().constBits().asarray(self.image.width() * self.image.height() * self.image.depth() // 8)) # 显示结果 print(result) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 这个例子创建了一个简单的GUI应用程序,其中包含一个标签和两个按钮。单击“打开图片”按钮将打开文件对话框,允许您选择要处理的图像。单击“检测”按钮将应用YOLOv5,检测图像中的物体,并将结果打印到控制台中。 请注意,这只是一个简单的例子,您需要根据您的具体需求进行修改。例如,您可能需要添加更多的按钮和控件来控制YOLOv5的参数,或者将结果显示在GUI中而不是打印到控制台中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值