Я пытаюсь сделать снимок всего рабочего стола через определенные промежутки времени и постоянно читаю нажатие клавиши.
При вводе текста в QLineEdit, если нажатие клавиши и захват экрана происходят одновременно, графический интерфейс полностью зависает.
Я пытался использовать pillow / mss для снимка экрана и PyUserInput / PyHook для захвата нажатия клавиш. Gui зависает на всех комбинациях. Полный пример кода ниже:
from PyQt5 import QtCore, QtGui, QtWidgets
from pykeyboard import PyKeyboardEvent
from PyQt5.QtCore import QThread, pyqtSignal, pyqtSlot
from mss import mss
import sys
class MonitorSuper(PyKeyboardEvent):
def tap(self, keycode, character, press):
print(keycode)
class Main_thread(QThread):
signal = pyqtSignal('PyQt_PyObject')
def __init__(self):
QThread.__init__(self)
None
def run(self):
while(1):
mon = MonitorSuper()
mon.run()
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.resize(535, 207)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.box_work = QtWidgets.QLineEdit(self.centralwidget)
self.box_work.setStyleSheet("border: 2px solid grey")
self.gridLayout.addWidget(self.box_work, 1, 0, 1, 2)
MainWindow.setCentralWidget(self.centralwidget)
self.thread_key = Main_thread()
self.thread_key.start()
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.take_snap)
self.timer.start(2000)
def take_snap(self):
filename = r'C:\Users\www\Desktop\NewImage.png'
print(filename)
filename = mss().shot(mon=-1, output=filename)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())