PyQt5 GUI зависает, когда происходит захват экрана и нажатие клавиш - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь сделать снимок всего рабочего стола через определенные промежутки времени и постоянно читаю нажатие клавиши.

При вводе текста в 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_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...