Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys, subprocess, time, threading, win32process, ctypes, os
- from PyQt5 import QtCore, QtGui, QtWidgets
- from PyQt5.QtWidgets import QWidget
- class Ui_Form(QWidget):
- """Создаём форму QT"""
- def __init__(self, parent=None):
- QWidget.__init__(self, parent)
- self.setObjectName("Form")
- self.setWindowModality(QtCore.Qt.NonModal)
- self.setEnabled(True)
- self.resize(275, 54)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
- self.setSizePolicy(sizePolicy)
- self.setMinimumSize(QtCore.QSize(275, 54))
- self.setMaximumSize(QtCore.QSize(275, 54))
- self.verticalLayout_2 = QtWidgets.QVBoxLayout(self)
- self.verticalLayout_2.setObjectName("verticalLayout_2")
- self.label = QtWidgets.QLabel(self)
- font = QtGui.QFont()
- font.setPointSize(11)
- font.setBold(False)
- font.setWeight(50)
- self.label.setFont(font)
- self.label.setAlignment(QtCore.Qt.AlignCenter)
- self.label.setObjectName("label")
- self.verticalLayout_2.addWidget(self.label)
- QtCore.QMetaObject.connectSlotsByName(self)
- self.setWindowTitle("GPU Temp")
- self.label.setText("Температура ГПУ: --")
- def closeEvent(self, event):
- """Событие при закрытии окна QT"""
- global closure
- closure = 1
- """Тело программы:"""
- app = QtWidgets.QApplication(sys.argv)
- ui = Ui_Form()
- ui.show()
- closure = 0
- def thread(my_func):
- """Декоратор, запускающий функцию в отдельном потоке:"""
- def wrapper(*args, **kwargs):
- my_thread = threading.Thread(target=my_func, args=args, kwargs=kwargs)
- my_thread.start()
- return wrapper
- @thread
- def processing():
- """Запрос показателей ГПУ:"""
- global closure
- hwnd = ctypes.windll.kernel32.GetConsoleWindow() # Модуль, закрывающий окно cmd
- if hwnd != 0:
- ctypes.windll.user32.ShowWindow(hwnd, 0)
- ctypes.windll.kernel32.CloseHandle(hwnd)
- pid = (win32process.GetWindowThreadProcessId(hwnd))
- arg = ['/PID {0}'.format(pid[1]), '/F']
- killer = r'C:\Windows\System32\taskkill.exe'
- os.spawnv(os.P_DETACH, killer, arg)
- nvsmi_path = r'c:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe' # расположение программы для мониторинга
- arg = ['-i 0 --loop-ms=3000 --format=csv,noheader --query-gpu=temperature.gpu'] # аргументы для запуска программы
- tmprtr = subprocess.Popen([nvsmi_path, arg], stdout=subprocess.PIPE, text=True) # запуск программы в новом процессе
- for i in tmprtr.stdout: # мониториннг stdout запущенного процесса мониторинга
- gpu_temp = int(i[0:2])
- ui.label.setText("Температура ГПУ: {0}".format(gpu_temp))
- time.sleep(3)
- if closure == 1:
- tmprtr.kill() # Завершение запущенного процесса мониторинга при закрытии окна Qt
- break
- processing()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment