pyQt5 时时输出显示(PyCharm QtDesigner PyUIC开发)

pyQt5 时时输出显示(PyCharm QtDesigner PyUIC开发)用QtDesigner工具进行界面绘制,注意各种插件的命名,以免生成的代码自己都看不懂。绘制好之后,再利用PyUIC把.ui文件转为.py文件。PyCharm可以集成QtDesignerPyUIC这两种工具。func.py:#-*-coding:utf-8-*-#Formimplementationgeneratedfromreadinguifile…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

用QtDesigner工具进行界面绘制,注意各种插件的命名,以免生成的代码自己都看不懂。

绘制好之后,再利用PyUIC把.ui文件转为.py文件。

PyCharm可以集成QtDesigner PyUIC这两种工具。

func.py:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'func.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!
from subprocess import Popen
from threading import Thread
import time
from PyQt5 import QtCore, QtGui, QtWidgets
import subprocess
import threading
from PyQt5.QtCore import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1014, 695)
        # self.ads = QtWidgets.QWidget(MainWindow)
        # self.ads.setObjectName("ads")
        self.horizontalLayoutWidget = QtWidgets.QWidget()
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(50, 80, 871, 521))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.driverWin_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.driverWin_label.setObjectName("driverWin_label")
        self.verticalLayout_5.addWidget(self.driverWin_label, 0, QtCore.Qt.AlignHCenter)
        self.driver_win = QtWidgets.QTextBrowser(self.horizontalLayoutWidget)
        self.driver_win.setObjectName("textBrowser")
        self.verticalLayout_5.addWidget(self.driver_win)
        self.horizontalLayout.addLayout(self.verticalLayout_5)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.label.setText("")
        self.label.setObjectName("label")
        self.verticalLayout_3.addWidget(self.label)
        self.start_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.start_button.setObjectName("start_button")
        self.verticalLayout_3.addWidget(self.start_button)
        self.stop_button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.stop_button.setObjectName("stop_button")
        self.verticalLayout_3.addWidget(self.stop_button)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout_3.addItem(spacerItem)
        self.horizontalLayout.addLayout(self.verticalLayout_3)
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.armWin_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.armWin_label.setObjectName("armWin_label")
        self.verticalLayout_4.addWidget(self.armWin_label, 0, QtCore.Qt.AlignHCenter)
        self.armWin = QtWidgets.QTextBrowser(self.horizontalLayoutWidget)
        self.armWin.setObjectName("armWin")
        self.verticalLayout_4.addWidget(self.armWin)
        self.transmitWin_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.transmitWin_label.setObjectName("transmitWin_label")
        self.verticalLayout_4.addWidget(self.transmitWin_label, 0, QtCore.Qt.AlignHCenter)
        self.transmitWin = QtWidgets.QTextBrowser(self.horizontalLayoutWidget)
        self.transmitWin.setObjectName("transmitWin")
        self.verticalLayout_4.addWidget(self.transmitWin)
        self.horizontalLayout.addLayout(self.verticalLayout_4)
        MainWindow.setCentralWidget(self.horizontalLayoutWidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1014, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        #self.driver_win.append("%s" % '111')

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.driverWin_label.setText(_translate("MainWindow", "driver window"))
        self.start_button.setText(_translate("MainWindow", "start"))
        self.stop_button.setText(_translate("MainWindow", "stop"))
        self.armWin_label.setText(_translate("MainWindow", "arm window"))
        self.transmitWin_label.setText(_translate("MainWindow", "transmit window"))


class show_thred(QThread):
    sinOut = pyqtSignal(str)

    def __init__(self,show_win,data):
        self.data = data
        self.show_win = show_win
        super().__init__()

    def run(self):
        while self.data.poll is not None:
            #self.show_win.append(str(self.data.stdout.readline()))
            outputdata = self.data.stdout.readline()
            self.sinOut.emit(str(outputdata))


class func_ui(Ui_MainWindow):
    driver_thread = ...  # type: Thread
    data = ...  # type: Popen
    driver_show = ...

    def __init__(self, MainWindow):
        self.setupUi(MainWindow)
        self.data = subprocess.Popen('./a.out', stdout=subprocess.PIPE, stdin=subprocess.PIPE,shell=True)
        self.start_button.clicked.connect(self.start_button_click)

    @pyqtSlot()
    def start_button_click(self):
        self.driver_show = show_thred(self.driver_win,self.data)
        self.driver_show.sinOut.connect(self.show_driver_text)
        self.driver_show.start()

    def show_driver_text(self,msg):
        print(msg)
        self.driver_win.append(msg)

Ui_MainWindow和retranslateUi都是用PyUIC生成的,需要注意的是,自动生成的添加了一个窗口部件,我把它注释替换了。

原本的设计是想像tk库一样,在单独的线程中填充文本框,但是QT中,我没有实现这样的功能,在主线程创建的text部件,在另外的线程去填充内容会报警告,出现段错误。QT的C++版本提供了函数来解决这个问题,但是Python中我没有找到。所以采用了另外的方式。线程读取内容,然后再传递给主线程(UI线程),再在UI线程中添加内容到text中。

 

main.py:

#!/usr/bin/python3.5
import func
import sys
#引入模块,基本控件位于pyqt5.qtwidgets
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5 import QtCore, QtGui, QtWidgets

if __name__ == "__main__":

    app = QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = func.func_ui(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

pyQt5 时时输出显示(PyCharm QtDesigner PyUIC开发)

效果图如上,布置界面的时候加入了各种布局(横纵),所以所有的部件都可以跟随窗口的大小改变大小

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175136.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Vue文件上传_vue上传文件并携带参数,如何弄

    Vue文件上传_vue上传文件并携带参数,如何弄vue文件上传,供大家参考,具体内容如下首先先说一下想要实现的效果就如截图所见,需要将企业和需要上传的文件提交到后台处理,那么接下来就说如何实现vue实现vue页面代码class=”upload-demo”ref=”upload”action=”doUpload”:limit=”1″:file-list=”fileList”:before-upload=”beforeUpload”>…

    2022年8月15日
    1
  • Singular Value Thresholding (SVT) 奇异值阈值

    Singular Value Thresholding (SVT) 奇异值阈值这个算法受到压缩感知中迭代算法的启发,在迭代过程中对矩阵进行SVD,然后将较小的奇异值设置为0,生成新的矩阵进行迭代。该算法运算速度快,对于高位低秩矩阵的恢复非常有效。

    2022年6月2日
    49
  • 刷子 撸一撸手头的几把刷

    刷子 撸一撸手头的几把刷想写刷子的博文不是一天两天了,看到这么多刷子,我立马头大啊!其实草刷子,是最近一年的动作,基本上都是近期收的,所以我元气很伤!!!休息天,花了2个小时拍照,这些基本都是比较爱用的刷子,还有一部分刷子不怎么用的被我雪藏起来了!全部倒在桌子上,感叹两个字:好乱!!! 经过整理就好看多了! 上层:下层:

    2022年8月22日
    4
  • Idea插件安装和管理「建议收藏」

    Idea插件安装和管理「建议收藏」1.打开插件视图点击File->Settings菜单,或Ctrl+Alt+S快捷键.打开设置面板.并切换到Plugins插件视图2.插件的管理和卸载当前idea中安装的所有插件(包括系统本身的和用户自己的)都会展示在列表中,右边的复选框表示当前插件的启用状态.在最右边的面板中显示了插件的具体信息和卸载按钮.当不需要插件时,…

    2022年6月1日
    75
  • ant接口用什么天线_电视后面有个接口写的是 标准ANT 75 欧输入,请问是什么意思,是天线吗?可不可以接闭路线啊?…「建议收藏」

    可以接的,ANT是天线接口的意思,ANT是的缩写。ANT天线输入端口,又称射频接口,是家庭有线电视采用的接口方式。射频成像原理是将视频信号(CVBS)和音频信号混合编码输出,然后复经过一系列的分离/解码过程,在显示设备上输出成像。输出质量不是很理想,因为步制骤太复杂,音频和视频混合编码会相互干扰。目前生产的液晶彩电有这个接口,在接收时,只需连接有线电视的可靠性线,就可以直接观看有线电视。扩展资料:…

    2022年4月8日
    163
  • sop流程图模板_标准作业流程SOP详解,附流程图绘制规范,不愁不会画!

    sop流程图模板_标准作业流程SOP详解,附流程图绘制规范,不愁不会画!原标题:标准作业流程SOP详解,附流程图绘制规范,不愁不会画!什么是SOP?StandardOperationProcedure所谓SOP,是StandardOperationProcedure三个单词中首字母的大写,即标准作业程序。是以文件的形式描述作业员在生产作业过程中的操作步骤和应遵守的事项;是作业员的作业指导书;是检验员用于指导工作的依据。“制造”就是以规定的成本、规定的工时…

    2022年5月26日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号