st3p4nb01

qna.habr

Jun 8th, 2021
861
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import logging
  2. import sys
  3. from PyQt5 import QtCore, QtGui, QtWidgets
  4. from datetime import datetime
  5.  
  6.  
  7. class Ui_MainWindow(object):
  8.     def setupUi(self, MainWindow):
  9.         MainWindow.setObjectName("MainWindow")
  10.         MainWindow.resize(900, 400)
  11.         self.centralwidget = QtWidgets.QWidget(MainWindow)
  12.         self.centralwidget.setObjectName("centralwidget")
  13.         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
  14.         self.pushButton.setGeometry(QtCore.QRect(110, 240, 75, 23))
  15.         self.pushButton.setObjectName("pushButton")
  16.         self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
  17.         self.plainTextEdit.setGeometry(QtCore.QRect(10, 10, 291, 131))
  18.         self.plainTextEdit.setObjectName("plainTextEdit")
  19.         self.label = QtWidgets.QLabel(self.centralwidget)
  20.         self.label.setGeometry(QtCore.QRect(130, 180, 47, 13))
  21.         self.label.setObjectName("label")
  22.         MainWindow.setCentralWidget(self.centralwidget)
  23.  
  24.         self.retranslateUi(MainWindow)
  25.         QtCore.QMetaObject.connectSlotsByName(MainWindow)
  26.  
  27.     def retranslateUi(self, MainWindow):
  28.         _translate = QtCore.QCoreApplication.translate
  29.         MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  30.         self.pushButton.setText(_translate("MainWindow", "PushButton"))
  31.         self.label.setText(_translate("MainWindow", "TextLabel"))
  32.  
  33. class QTextEditLogger(logging.Handler):
  34.     def __init__(self, parent):
  35.         super().__init__()
  36.  
  37.         self.PVELogs = QtWidgets.QPlainTextEdit(parent.centralwidget)
  38.        
  39.         self.PVELogs.setGeometry(QtCore.QRect(40, 50, 541, 491))
  40.         font = QtGui.QFont()
  41.         font.setFamily("Consolas")
  42.         font.setPointSize(10)
  43.         self.PVELogs.setFont(font)
  44.         self.PVELogs.setStyleSheet("background-color: rgb(30, 30, 30); color: rgb(255, 255, 255);")
  45.         self.PVELogs.setReadOnly(True)
  46.         self.PVELogs.setPlainText("")
  47.         self.PVELogs.setObjectName("PVELogs")
  48.        
  49.         parent.layout.addWidget(self.PVELogs, 1, 0)
  50.  
  51.         self.PVPLogs = QtWidgets.QPlainTextEdit(parent.centralwidget)
  52.         self.PVPLogs.setGeometry(QtCore.QRect(610, 50, 541, 491))
  53.         font = QtGui.QFont()
  54.         font.setFamily("Consolas")
  55.         font.setPointSize(10)
  56.         self.PVPLogs.setFont(font)
  57.         self.PVPLogs.setStyleSheet("background-color: rgb(30, 30, 30); color: rgb(255, 255, 255);")
  58.         self.PVPLogs.setReadOnly(True)
  59.         self.PVPLogs.setPlainText("")
  60.         self.PVPLogs.setObjectName("PVPLogs")
  61.        
  62.         parent.layout.addWidget(self.PVPLogs, 1, 1)
  63.  
  64.     def emit(self, record):
  65.         msg0 = self.format(record)
  66.         self.PVELogs.appendPlainText(msg0)
  67.  
  68.         msg1 = self.format(record)
  69.         self.PVPLogs.appendPlainText(msg1)        
  70.  
  71.  
  72. class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
  73.     def __init__(self):
  74.         super().__init__()
  75.  
  76.         self.setupUi(self)
  77.        
  78.         self.layout = QtWidgets.QGridLayout(self.centralwidget)
  79.         self.layout.addWidget(self.label, 2, 0)
  80.         self.layout.addWidget(self.pushButton, 2, 1)
  81.  
  82.  
  83.         logTextBox = QTextEditLogger(self)
  84.         now = datetime.now()
  85.         gettime = now.strftime("%d/%m/%Y %H:%M:%S")
  86.         logTextBox.setFormatter(logging.Formatter(f'{gettime} %(message)s'))
  87.         logging.getLogger().addHandler(logTextBox)
  88.         logging.getLogger().setLevel(logging.DEBUG)
  89.  
  90.         self.plainTextEdit.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
  91.  
  92.         self.thread = WorkThread()
  93.         self.thread.threadSignal.connect(self.func2)          
  94.         self.pushButton.clicked.connect(self.func1)      
  95.  
  96.         logging.debug("Это сообщение об отладке")
  97.         logging.info(u'This is an info message')
  98.  
  99.     def func1(self):
  100.         #создаем поток
  101.         self.thread.start()
  102.  
  103.     def func2(self, value):
  104.         logging.info("Передано из потока -> {}".format(value))
  105.  
  106.  
  107. class WorkThread(QtCore.QThread):
  108.     ''' Потоковая задача '''
  109.     threadSignal = QtCore.pyqtSignal(int)
  110.  
  111.     def __init__(self):
  112.         super().__init__()
  113.  
  114.     def run(self):    
  115.         for i in range(10):
  116.             self.msleep(200)
  117.             self.threadSignal.emit(i)
  118.  
  119. if __name__=='__main__':
  120.     app = QtWidgets.QApplication(sys.argv)  
  121.     window = ExampleApp()                  
  122.     window.show()                          
  123.     sys.exit(app.exec_())
RAW Paste Data