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开发)

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • C++进阶

    C++进阶函数模板函数模板语法函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。语法:template<typenameT>

    2021年12月13日
  • jsp 和 servlet 有什么区别?

    jsp 和 servlet 有什么区别?jsp和servlet有什么区别?Servlet一种服务器端的Java应用程序 由Web容器加载和管理 用于生成动态Web内容 负责处理客户端请求Jsp是Servlet的扩展,本质上还是Servlet 每个Jsp页面就是一个Servlet实例 Jsp页面会被Web容器编译成Servlet,Servlet再负责响…

  • 比较复杂的数据库查询案例,建表语句和测试数据[通俗易懂]

    比较复杂的数据库查询案例,建表语句和测试数据[通俗易懂]比较复杂的数据库查询案例,建表语句和测试数据

  • jvm 吞吐量_jvm oom

    jvm 吞吐量_jvm oom公式吞吐量=运行代码时间/(运行代码时间+垃圾收集时间)示例虚拟机总共运行了100分钟1)运行代码:99分钟2)垃圾收集:1分钟吞吐量=99/100=99%参数-XX:GCRatio 设置吞吐量的大小-XX:MaxGCPauseMillis 控制最大的垃圾收集停顿时间分析互联网交互式项目:需要在停顿时间范围内(100~200ms),保证最大吞吐量(96%~)传统项目:需要在保证最大吞吐量范围内,降低停顿时间吞吐量越大,代表着垃圾收集时间越短,那么用户代码可以充分

  • webstorm激活码3月最新在线激活

    webstorm激活码3月最新在线激活,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 点击率预估算法:FM与FFM[通俗易懂]

    点击率预估算法:FM与FFM[通俗易懂]点击率预估算法:FFM@(计算广告)[计算广告]点击率预估算法FFM1FM1背景11线性模型12二项式模型2FM21FM基本原理22数据分析23参数个数24计算时间复杂度25梯度26训练时间复杂度2FFM1背景及基本原理2模型与最优化问题21模型22最优化问题23自适应学习率24FFM算法的最终形式3完整算法流程31计算梯度32

发表回复

您的电子邮箱地址不会被公开。

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