1.使用qt designer设计一个ui,
2.自动生成ui对应的py文件
3.创建一个子类,继承自动生成的py,因为每次自动生成都会覆盖
4.为按钮添加信号槽,实现点击退出
5.实现线程定时功能,动态更新界面控件
#main.py
import time
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QDateTime
# 创建一个子线程
class UpdateThread(QThread):
# 创建一个信号,触发时传递当前时间给槽函数
update_data = pyqtSignal(str)
def run(self):
# 无限循环,每秒钟传递一次时间给UI
while True:
data = QDateTime.currentDateTime()
currentTime = data.toString("yyyy-MM-dd hh:mm:ss")
self.update_data.emit(str(currentTime))
time.sleep(1)
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'qosmain.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
# qosmain.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(744, 623)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(50, 70, 54, 12))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(50, 190, 54, 12))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(50, 300, 54, 12))
self.label_3.setObjectName("label_3")
self.tb_Jitter = QtWidgets.QTextBrowser(self.centralwidget)
self.tb_Jitter.setGeometry(QtCore.QRect(120, 50, 256, 51))
self.tb_Jitter.setObjectName("tb_Jitter")
self.tb_lost = QtWidgets.QTextBrowser(self.centralwidget)
self.tb_lost.setGeometry(QtCore.QRect(120, 160, 256, 51))
self.tb_lost.setObjectName("tb_lost")
self.tb_bitrate = QtWidgets.QTextBrowser(self.centralwidget)
self.tb_bitrate.setGeometry(QtCore.QRect(120, 280, 256, 51))
self.tb_bitrate.setObjectName("tb_bitrate")
self.btn_ok = QtWidgets.QPushButton(self.centralwidget)
self.btn_ok.setGeometry(QtCore.QRect(80, 500, 75, 23))
self.btn_ok.setCheckable(True)
self.btn_ok.setChecked(True)
self.btn_ok.setAutoDefault(False)
self.btn_ok.setObjectName("btn_ok")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 744, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "抖动:"))
self.label_2.setText(_translate("MainWindow", "丢包数量:"))
self.label_3.setText(_translate("MainWindow", "码率:"))
self.btn_ok.setText(_translate("MainWindow", "确定"))
#childui.py
import sys
from qosmain import Ui_MainWindow
from PyQt5 import QtWidgets
from updatethread import UpdateThread
from PyQt5.QtCore import pyqtSlot
class childui(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self, parent=None):
super(childui, self).__init__(parent=parent)
self.setupUi(self)
self.start()
@pyqtSlot()
def on_btn_ok_clicked(self):
print("btn_ok被点击, 退出")
sys.exit(0)
def set_jitter(self, text):
self.tb_Jitter.setText(text)
def start(self):
# 创建子线程
self.subThread = UpdateThread()
# 将子线程中的信号与timeUpdate槽函数绑定
self.subThread.update_data.connect(self.timeUpdate)
# 启动子线程(开始更新时间)
self.subThread.start()
# 被子线程的信号触发,更新一次时间
def timeUpdate(self, data):
self.tb_Jitter.setText(data)
#updatethread.py
import time
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QDateTime
# 创建一个子线程
class UpdateThread(QThread):
# 创建一个信号,触发时传递当前时间给槽函数
update_data = pyqtSignal(str)
def run(self):
# 无限循环,每秒钟传递一次时间给UI
while True:
data = QDateTime.currentDateTime()
currentTime = data.toString("yyyy-MM-dd hh:mm:ss")
self.update_data.emit(str(currentTime))
time.sleep(1)
参考资料
https://blog.youkuaiyun.com/huage926/article/details/128655195
https://www.cnblogs.com/leokale-zz/p/13131953.html
如何用Python制作图形化界面?PyCharm搭建pyqt5开发环境_pycharm做界面设计_Yunlord的博客-优快云博客