wojtryb / Shortcut-Composer

Krita plugin for creating complex keyboard shortcuts
GNU General Public License v3.0
261 stars 9 forks source link

Brush Selector Crash #79

Closed KingCarnival closed 5 months ago

KingCarnival commented 6 months ago

General info

Bug description

Traceback: (Name Censored for privacy)


Python 3.10.7: C:\Program Files\Krita (x64)\bin\krita.exe
Sun Mar  3 21:25:13 2024

A problem occurred in a Python script.  Here is the sequence of
function calls leading up to the error, in the order they occurred.

 C:\Users\Name\AppData\Roaming\krita\pykrita\shortcut_composer\templates\pie_menu_utils\pie_manager.py in _handle_cursor(self=<templates.pie_menu_utils.pie_manager.PieManager object>)
   60         angle = circle.angle_from_point(cursor)
   61         holder = self._pie_widget.order_handler.widget_holder
   62         self._set_active_label(holder.on_angle(angle).label)
   63 
   64     def _set_active_label(self, label: PieLabel | None) -> None:
self = <templates.pie_menu_utils.pie_manager.PieManager object>
self._set_active_label = <bound method PieManager._set_active_label of <t...es.pie_menu_utils.pie_manager.PieManager object>>
holder = <templates.pie_menu_utils.pie_widget_utils.widget_holder.WidgetHolder object>
holder.on_angle = <bound method WidgetHolder.on_angle of <template..._widget_utils.widget_holder.WidgetHolder object>>
angle = 157.89055165624833
).label undefined

 C:\Users\Name\AppData\Roaming\krita\pykrita\shortcut_composer\templates\pie_menu_utils\pie_widget_utils\widget_holder.py in on_angle(self=<templates.pie_menu_utils.pie_widget_utils.widget_holder.WidgetHolder object>, angle=157.89055165624833)
   40             return abs((raw_difference + 180) % 360 - 180)
   41 
   42         closest = min(self.angles(), key=angle_difference)
   43         return self._widgets[closest]
   44 
closest undefined
builtinmin = <built-in function min>
self = <templates.pie_menu_utils.pie_widget_utils.widget_holder.WidgetHolder object>
self.angles = <bound method WidgetHolder.angles of <templates...._widget_utils.widget_holder.WidgetHolder object>>
key undefined
angle_difference = <function WidgetHolder.on_angle.<locals>.angle_difference>
ValueError: min() arg is an empty sequence
    __cause__ = None
    __class__ = <class 'ValueError'>
    __context__ = None
    __delattr__ = <method-wrapper '__delattr__' of ValueError object>
    __dict__ = {}
    __dir__ = <built-in method __dir__ of ValueError object>
    __doc__ = 'Inappropriate argument value (of correct type).'
    __eq__ = <method-wrapper '__eq__' of ValueError object>
    __format__ = <built-in method __format__ of ValueError object>
    __ge__ = <method-wrapper '__ge__' of ValueError object>
    __getattribute__ = <method-wrapper '__getattribute__' of ValueError object>
    __gt__ = <method-wrapper '__gt__' of ValueError object>
    __hash__ = <method-wrapper '__hash__' of ValueError object>
    __init__ = <method-wrapper '__init__' of ValueError object>
    __init_subclass__ = <built-in method __init_subclass__ of type object>
    __le__ = <method-wrapper '__le__' of ValueError object>
    __lt__ = <method-wrapper '__lt__' of ValueError object>
    __ne__ = <method-wrapper '__ne__' of ValueError object>
    __new__ = <built-in method __new__ of type object>
    __reduce__ = <built-in method __reduce__ of ValueError object>
    __reduce_ex__ = <built-in method __reduce_ex__ of ValueError object>
    __repr__ = <method-wrapper '__repr__' of ValueError object>
    __setattr__ = <method-wrapper '__setattr__' of ValueError object>
    __setstate__ = <built-in method __setstate__ of ValueError object>
    __sizeof__ = <built-in method __sizeof__ of ValueError object>
    __str__ = <method-wrapper '__str__' of ValueError object>
    __subclasshook__ = <built-in method __subclasshook__ of type object>
    __suppress_context__ = False
    __traceback__ = <traceback object>
    args = ('min() arg is an empty sequence',)
    with_traceback = <built-in method with_traceback of ValueError object>

The above is a description of an error in a Python program.  Here is
the original traceback:

Traceback (most recent call last):
  File "C:\Users\Name\AppData\Roaming\krita\pykrita\shortcut_composer\templates\pie_menu_utils\pie_manager.py", line 62, in _handle_cursor
    self._set_active_label(holder.on_angle(angle).label)
  File "C:\Users\Name\AppData\Roaming\krita\pykrita\shortcut_composer\templates\pie_menu_utils\pie_widget_utils\widget_holder.py", line 42, in on_angle
    closest = min(self.angles(), key=angle_difference)
ValueError: min() arg is an empty sequence```
wojtryb commented 6 months ago

Thank you for reporting.

I've never had this issue, do I'll have to try to reproduce it on Windows. I'll keep you informed

wojtryb commented 5 months ago

I made a possible fix which should prevent the crash from happening. You can check it out on the development version. If I get a confirmation it fixes a crash, I'll release 1.5.1

It won't help with the slowdown though. Can you elaborate when it happens, after how much time, how often you have it?

KingCarnival commented 5 months ago

I've installed the dev and haven't gotten the error again in the brief time I've played around with it

wojtryb commented 5 months ago

That's great. Thanks for testing! I'll release this bugfix soon with 1.5.1

wojtryb commented 5 months ago

This issue should now be fixed in 1.5.1