Module qimview.tests_utils.event_player

Expand source code
from ..utils.qt_imports import QtCore, QtWidgets
from .qtdump import *

class EventPlayer:

    def __init__(self):
        self.widgets = dict()

    def register_widget(self, name, widget):
        self.widgets[name] = widget

    def play_events(self, event_list=None, start_delay=100):
        if len(event_list) > 0:
            # Send events using Qtimer
            print("EventPlayer: start")
            QtCore.QTimer.singleShot(start_delay, lambda: self.send_event( event_list, 0))


    def send_event(self, event_list, index):
        # now create mouse event
        current_event = event_list[index]
        event_info    = current_event['info']
        widget_name   = current_event.get('widget_name')
        # print(f"EventPlayer {index}: {widget_name} {event_info}", end=', ')
        if widget_name in self.widgets:
            widget = self.widgets[widget_name]
            if isinstance(event_info['type'],str):
                if event_info['type'] == 'save_screen':
                    widget_hash = QtDump.get_screen_hash(widget)
                    recorded_hash = event_info['hash']
                    # print(f"hash now {widget_hash} recorded {recorded_hash}")
                    if widget_hash != recorded_hash:
                        print('Hash comparison failure !!!')
                    else:
                        print('Hash comparison success !!!')
            else:
                # --- Deal with QEvent
                qt_event = QtDump.dict2event(event_info)
                if qt_event.type() in RESIZE_EVENTS:
                    # for resize, we need to actually do the resize of the control widget instead of calling the resize event
                    # QtWidgets.QApplication.postEvent(widget.parent(), new_event)
                    # print(" resize", end=', ')
                    widget.resize(qt_event.size())
                else:
                    # print(" post event", end=', ')
                    QtWidgets.QApplication.postEvent(widget, qt_event)
        else:
            print(f"widget '{widget_name}' not found", end=', ')
        index = index + 1
        if index < len(event_list):
            # print("")
            delay = event_list[index]['time']-event_list[index-1]['time']
            QtCore.QTimer.singleShot(delay*1000,  lambda: self.send_event(event_list, index))
        else:
            print(" end")

Classes

class EventPlayer
Expand source code
class EventPlayer:

    def __init__(self):
        self.widgets = dict()

    def register_widget(self, name, widget):
        self.widgets[name] = widget

    def play_events(self, event_list=None, start_delay=100):
        if len(event_list) > 0:
            # Send events using Qtimer
            print("EventPlayer: start")
            QtCore.QTimer.singleShot(start_delay, lambda: self.send_event( event_list, 0))


    def send_event(self, event_list, index):
        # now create mouse event
        current_event = event_list[index]
        event_info    = current_event['info']
        widget_name   = current_event.get('widget_name')
        # print(f"EventPlayer {index}: {widget_name} {event_info}", end=', ')
        if widget_name in self.widgets:
            widget = self.widgets[widget_name]
            if isinstance(event_info['type'],str):
                if event_info['type'] == 'save_screen':
                    widget_hash = QtDump.get_screen_hash(widget)
                    recorded_hash = event_info['hash']
                    # print(f"hash now {widget_hash} recorded {recorded_hash}")
                    if widget_hash != recorded_hash:
                        print('Hash comparison failure !!!')
                    else:
                        print('Hash comparison success !!!')
            else:
                # --- Deal with QEvent
                qt_event = QtDump.dict2event(event_info)
                if qt_event.type() in RESIZE_EVENTS:
                    # for resize, we need to actually do the resize of the control widget instead of calling the resize event
                    # QtWidgets.QApplication.postEvent(widget.parent(), new_event)
                    # print(" resize", end=', ')
                    widget.resize(qt_event.size())
                else:
                    # print(" post event", end=', ')
                    QtWidgets.QApplication.postEvent(widget, qt_event)
        else:
            print(f"widget '{widget_name}' not found", end=', ')
        index = index + 1
        if index < len(event_list):
            # print("")
            delay = event_list[index]['time']-event_list[index-1]['time']
            QtCore.QTimer.singleShot(delay*1000,  lambda: self.send_event(event_list, index))
        else:
            print(" end")

Methods

def play_events(self, event_list=None, start_delay=100)
Expand source code
def play_events(self, event_list=None, start_delay=100):
    if len(event_list) > 0:
        # Send events using Qtimer
        print("EventPlayer: start")
        QtCore.QTimer.singleShot(start_delay, lambda: self.send_event( event_list, 0))
def register_widget(self, name, widget)
Expand source code
def register_widget(self, name, widget):
    self.widgets[name] = widget
def send_event(self, event_list, index)
Expand source code
def send_event(self, event_list, index):
    # now create mouse event
    current_event = event_list[index]
    event_info    = current_event['info']
    widget_name   = current_event.get('widget_name')
    # print(f"EventPlayer {index}: {widget_name} {event_info}", end=', ')
    if widget_name in self.widgets:
        widget = self.widgets[widget_name]
        if isinstance(event_info['type'],str):
            if event_info['type'] == 'save_screen':
                widget_hash = QtDump.get_screen_hash(widget)
                recorded_hash = event_info['hash']
                # print(f"hash now {widget_hash} recorded {recorded_hash}")
                if widget_hash != recorded_hash:
                    print('Hash comparison failure !!!')
                else:
                    print('Hash comparison success !!!')
        else:
            # --- Deal with QEvent
            qt_event = QtDump.dict2event(event_info)
            if qt_event.type() in RESIZE_EVENTS:
                # for resize, we need to actually do the resize of the control widget instead of calling the resize event
                # QtWidgets.QApplication.postEvent(widget.parent(), new_event)
                # print(" resize", end=', ')
                widget.resize(qt_event.size())
            else:
                # print(" post event", end=', ')
                QtWidgets.QApplication.postEvent(widget, qt_event)
    else:
        print(f"widget '{widget_name}' not found", end=', ')
    index = index + 1
    if index < len(event_list):
        # print("")
        delay = event_list[index]['time']-event_list[index-1]['time']
        QtCore.QTimer.singleShot(delay*1000,  lambda: self.send_event(event_list, index))
    else:
        print(" end")