KanvasBuddy - a Minimalist Toolbar

Hey there!

I just gave this plugin a try. I really love the idea, and I paint a lot in Canvas-only mode so this could be super useful to me. But I have ran into a multitude of issues, several of which alone make it completely unusable to me:

  1. I could find no way to make it only show in canvas-only mode, so every time I switch between normal and canvas-only (which I do all the time) I would have to manually start and stop KB

  2. KB “steals” dockers, so if it’s open in normal mode, my dockers will be missing.

  3. I couldn’t find a way to resize it, and a color picker that is smaller than my cursor is useless.image

  4. The sliders (eg canvas rotation, brush size) do not update if their value was changed via other means, (eg the canvas actions) so they are useless for giving information.

Point 1 and 2 are tied together too, since there is really no point in KB displaying when not in Canvas-Only mode, to begin with.

If these issues were fixed I would probably use this tool a lot so I don’t have to come out of canvas-only only for eg. switching layer. But in its current state it is unusable. :frowning:

Arch Linux + KDE 5, fully updated.
Tested with both the stable release and dev versions.

it is not work in 4.4.0 beta2

1 Like

Hey @Kapyia, are you still updating this plugin? If life keeps you busy that’s fine and understandable, but in that case I wonder if anyone else could try to help us with fixing issues? I sadly can’t, I don’t know python or the API and don’t have the time and energy to start learning it now. :frowning:

This is a minimalist description of the encountered problem :sweat_smile:

Grum999

I tried to take a look but… on my side the plugin works perfectly on Krita 4.4.0-beta2 :slight_smile:
I’m using an appimage under Linux.

Then, I suppose that people for which plugin doesn’t work anymore are using Windows (10) or maybe a Mac OS?
Or maybe there’s some specifics configuration applied to plugin?

With Krita 4.4.0-beta1 the problem occurs too? or is it specific to beta2 only?

Without any information about the problem, that’s very hard to understand what is the problem and to help…

Grum999

Hi guys, is there a way to put this scroll menu button to the top of the window?

1 Like

This is a bit old but just making sure it’s here, I’m on win 10 in 4.4.1 and it seems to be working just fine for me.

@Kapyia, could you add “PatternScale” slider, please (was added to Krita some time ago)?

And what about ArtisticColorSelector, is it still “broke”?

from google translate:
hi. I used your file but this error occurred. The original version did not have such a problem. May I know where the problem is?
AttributeError
Python 3.8.1: C:\GAMES\STEAM\steamapps\common\Krita\krita\bin\krita.exe
Sun Mar 21 07:07:08 2021

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\123\AppData\Roaming\krita\pykrita\kanvasbuddy\uikanvasbuddy.py in closeEvent(self=<kanvasbuddy.uikanvasbuddy.UIKanvasBuddy object>, e=<PyQt5.QtGui.QCloseEvent object>)
  119 
  120     def closeEvent(self, e):
  121         self.panelStack.dismantle() # Return borrowed widgets to previous parents or else we're doomed
  122         self.kbuddy.setIsActive(False)
  123         super().closeEvent(e)
self = <kanvasbuddy.uikanvasbuddy.UIKanvasBuddy object>
self.panelStack = <kanvasbuddy.kbpanelstack.KBPanelStack object>
self.panelStack.dismantle = <bound method KBPanelStack.dismantle of <kanvasbuddy.kbpanelstack.KBPanelStack object>>

 C:\Users\123\AppData\Roaming\krita\pykrita\kanvasbuddy\kbpanelstack.py in dismantle(self=<kanvasbuddy.kbpanelstack.KBPanelStack object>)
   76         for parent in self._widgetParents:
   77             self._widgetParents[parent].setWidget(self.panel(parent).widget())
   78             self._widgetParents[parent].widget().setEnabled(True)
   79 
   80 
self = <kanvasbuddy.kbpanelstack.KBPanelStack object>
self._widgetParents = {'ColorSelectorNg': <PyQt5.QtWidgets.QDockWidget object>, 'KisLayerBox': <PyQt5.QtWidgets.QDockWidget object>, 'PaletteDocker': <PyQt5.QtWidgets.QDockWidget object>, 'sharedtooldocker': <PyQt5.QtWidgets.QDockWidget object>}
parent = 'sharedtooldocker'
].widget undefined
AttributeError: 'NoneType' object has no attribute 'setEnabled'
    __cause__ = None
    __class__ = <class 'AttributeError'>
    __context__ = None
    __delattr__ = <method-wrapper '__delattr__' of AttributeError object>
    __dict__ = {}
    __dir__ = <built-in method __dir__ of AttributeError object>
    __doc__ = 'Attribute not found.'
    __eq__ = <method-wrapper '__eq__' of AttributeError object>
    __format__ = <built-in method __format__ of AttributeError object>
    __ge__ = <method-wrapper '__ge__' of AttributeError object>
    __getattribute__ = <method-wrapper '__getattribute__' of AttributeError object>
    __gt__ = <method-wrapper '__gt__' of AttributeError object>
    __hash__ = <method-wrapper '__hash__' of AttributeError object>
    __init__ = <method-wrapper '__init__' of AttributeError object>
    __init_subclass__ = <built-in method __init_subclass__ of type object>
    __le__ = <method-wrapper '__le__' of AttributeError object>
    __lt__ = <method-wrapper '__lt__' of AttributeError object>
    __ne__ = <method-wrapper '__ne__' of AttributeError object>
    __new__ = <built-in method __new__ of type object>
    __reduce__ = <built-in method __reduce__ of AttributeError object>
    __reduce_ex__ = <built-in method __reduce_ex__ of AttributeError object>
    __repr__ = <method-wrapper '__repr__' of AttributeError object>
    __setattr__ = <method-wrapper '__setattr__' of AttributeError object>
    __setstate__ = <built-in method __setstate__ of AttributeError object>
    __sizeof__ = <built-in method __sizeof__ of AttributeError object>
    __str__ = <method-wrapper '__str__' of AttributeError object>
    __subclasshook__ = <built-in method __subclasshook__ of type object>
    __suppress_context__ = False
    __traceback__ = <traceback object>
    args = ("'NoneType' object has no attribute 'setEnabled'",)
    with_traceback = <built-in method with_traceback of AttributeError 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\123\AppData\Roaming\krita\pykrita\kanvasbuddy\uikanvasbuddy.py", line 121, in closeEvent
    self.panelStack.dismantle() # Return borrowed widgets to previous parents or else we're doomed
  File "C:\Users\123\AppData\Roaming\krita\pykrita\kanvasbuddy\kbpanelstack.py", line 78, in dismantle
    self._widgetParents[parent].widget().setEnabled(True)
AttributeError: 'NoneType' object has no attribute 'setEnabled'

I don’t really know how to help here because I didn’t make or maintain KB so I can’t interpret the Python traceback.

But the last line seems to suggest that a non-supported widget is trying to be enabled. My advice would be to turn off the new widgets in the json and turn them back on one at a time to see what the problematic widget is.

Is there a way to make those action in two raws ?
Capture

Hello @ giddeon and welcome!

Unfortunately, at the moment I don’t know of any way to place the additional icons / actions in additional rows.
Since I like your idea very much and I am interested in it myself, I have searched today, for a few hours without success, for an appropriate possibility to implement it.

some additional info of lower value (won't help either)

Unfortunately, I have only been working intensively with Krita since February and have no idea about programming in today’s programming languages. I programmed something with BASIC in the 1980s and have never dealt with it since 1993.
I can juggle scripts a bit and so I included the Python snippets offered in this thread in my KanvasBuddy installation and was even able to clean up the small syntax errors on my own. However, that is all I am capable of.

Michelist

Has anyone got Kanvasbuddy working in Krita 5?

It still works in the latest 4 stable, but whenever I try to activate it in the Krita 5 nightlies I get this error (from kbpresetchooser):

AttributeError: ‘QWidgetItem’ object has no attribute ‘itemAtPosition’

I did customise mine quite a bit and haven’t tested a default installation.

It’s such a great plugin for sketching and focused work - I hope we’ll still be able to use it in future. :pleading_face:

4 Likes

I’m unable to use it in the Krita 5 alphas too. Have tried to find out what the reason is, but my coding skills are at novice-level and so this was not successful. So I’m also very sorry that it doesn’t work in the actual Krita 5’s. (And sometimes I have thought, this is a reason to stuck on Krita 4!)

Michelist

Edit: Grammar

2 Likes

Maybe that item changed name on the new version?

1 Like

I thought that might be the case, but the code doesn’t mean much to me. This is what the error seems to refer to:

I added brush settings as a button on the bottom panel, so that’s a possible candidate. :man_shrugging:

I got the impression from what Kapyia said that the plugin uses some unorthodox tricks to get it to work, so maybe there’s some fundamental incompatibility developed?

I could probably make lots of guesses - but I really don’t know what I’m talking about… :upside_down_face:

1 Like

It just occurred to me the ‘PresetChooser’ it’s referring to is exactly that; The brush preset button on the top panel! Doh! :blush:

edit: I just tried disabling the preset chooser button in the config file and KanvasBuddy started up! :nerd_face:

2 Likes

that is surely more than I can do with the ones I do.
I think what it is doing is just hidding some buttons that are excessive. you can try and comment them out (# self.layout.itemAt()…) so you receive 2 extra buttons but dont need to call perhaps 2 names that might have changed in the new version of krita.

2 Likes

It’s all like sorcery to me dude!

And Pigment.O is a great plugin! :wink::+1:

2 Likes

Thank you very much for fixing the plugin.
Is it possible that you place the bottom button (the one that serves to collapse the selected window) up?