Kapyia/KanvasBuddy

Error ('QWidgetItem' object has no attribute 'itemAtPosition') with kavasbuddy when trying to launch.

Opened this issue · 1 comments

Hello,
I am a linux and long time Krita user and just came across this plugin. However, after following the instructions for the latest version I get an error after enabling it.

`AttributeError
Python 3.6.12: /usr/bin/python3
Sun Sep 27 03:02:08 2020

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

/home/rbear/.local/share/krita/pykrita/kanvasbuddy/kanvasbuddy.py in launchInterface(self=<kanvasbuddy.kanvasbuddy.KanvasBuddy object>)
54 # importlib.reload(uikanvasbuddy) # FOR TESTING ONLY
55 self.isActive = True
56 ui = uikanvasbuddy.UIKanvasBuddy(self)
57 ui.launch()
58
ui undefined
global uikanvasbuddy = <module 'kanvasbuddy.uikanvasbuddy' from '/home/...hare/krita/pykrita/kanvasbuddy/uikanvasbuddy.py'>
uikanvasbuddy.UIKanvasBuddy = <class 'kanvasbuddy.uikanvasbuddy.UIKanvasBuddy'>
self = <kanvasbuddy.kanvasbuddy.KanvasBuddy object>

/home/rbear/.local/share/krita/pykrita/kanvasbuddy/uikanvasbuddy.py in init(self=<kanvasbuddy.uikanvasbuddy.UIKanvasBuddy object>, kbuddy=<kanvasbuddy.kanvasbuddy.KanvasBuddy object>)
61 # SET UP PANELS
62 self.panelStack = pnlstk.KBPanelStack(self)
63 self.initPanels(config['PANELS'], jsonData['panels'])
64 self.layout().addWidget(self.panelStack)
65
self = <kanvasbuddy.uikanvasbuddy.UIKanvasBuddy object>
self.initPanels = <bound method UIKanvasBuddy.initPanels of <kanvasbuddy.uikanvasbuddy.UIKanvasBuddy object>>
config = <configparser.ConfigParser object>
jsonData = {'canvasOptions': {'canvasOnly': {'icon': 'light_document-new', 'id': 'view_show_canvas_only'}, 'instantPreview': {'icon': 'light_visible', 'id': 'level_of_detail_mode'}, 'mirrorCanvas': {'icon': 'light_mirror-view', 'id': 'mirror_canvas'}, 'resetZoom': {'icon': 'light_zoom-original', 'id': 'zoom_to_100pct'}, 'wrapAround': {'icon': 'light_view-grid', 'id': 'wrap_around_mode'}}, 'panels': {'advancedColor': {'icon': 'light_krita_tool_color_picker', 'id': 'ColorSelectorNg', 'size': [290, 290]}, 'animation': {'icon': 'light_addblankframe', 'id': 'AnimationDocker', 'size': []}, 'arrange': {'icon': '24_light_align-horizontal-center', 'id': 'ArrangeDocker', 'size': [100, 100]}, 'artisticColor': {'icon': 'light_wheel-sectors', 'id': 'ArtisticColorSelector', 'size': []}, 'comicsProject': {'icon': 'light_select-all', 'id': 'comics_project_manager_docker', 'size': []}, 'digitalColors': {'icon': 'light_krita_tool_gradient', 'id': 'DigitalMixer', 'size': []}, 'history': {'icon': 'light_fileLayer', 'id': 'History', 'size': []}, 'layers': {'icon': 'light_duplicatelayer', 'id': 'KisLayerBox', 'size': []}, 'lut': {'icon': 'light_color-to-alpha', 'id': 'LutDocker', 'size': []}, 'onionSkins': {'icon': 'light_onion_skin_options', 'id': 'OnionSkinsDocker', 'size': [100, 100]}, ...}}

/home/rbear/.local/share/krita/pykrita/kanvasbuddy/uikanvasbuddy.py in initPanels(self=<kanvasbuddy.uikanvasbuddy.UIKanvasBuddy object>, config=<Section: PANELS>, data={'advancedColor': {'icon': 'light_krita_tool_color_picker', 'id': 'ColorSelectorNg', 'size': [290, 290]}, 'animation': {'icon': 'light_addblankframe', 'id': 'AnimationDocker', 'size': []}, 'arrange': {'icon': '24_light_align-horizontal-center', 'id': 'ArrangeDocker', 'size': [100, 100]}, 'artisticColor': {'icon': 'light_wheel-sectors', 'id': 'ArtisticColorSelector', 'size': []}, 'comicsProject': {'icon': 'light_select-all', 'id': 'comics_project_manager_docker', 'size': []}, 'digitalColors': {'icon': 'light_krita_tool_gradient', 'id': 'DigitalMixer', 'size': []}, 'history': {'icon': 'light_fileLayer', 'id': 'History', 'size': []}, 'layers': {'icon': 'light_duplicatelayer', 'id': 'KisLayerBox', 'size': []}, 'lut': {'icon': 'light_color-to-alpha', 'id': 'LutDocker', 'size': []}, 'onionSkins': {'icon': 'light_onion_skin_options', 'id': 'OnionSkinsDocker', 'size': [100, 100]}, ...})
81 for entry in config:
82 if config.getboolean(entry):
83 self.panelStack.loadPanel(data[entry])
84
85
self = <kanvasbuddy.uikanvasbuddy.UIKanvasBuddy object>
self.panelStack = <kanvasbuddy.kbpanelstack.KBPanelStack object>
self.panelStack.loadPanel = <bound method KBPanelStack.loadPanel of <kanvasbuddy.kbpanelstack.KBPanelStack object>>
data = {'advancedColor': {'icon': 'light_krita_tool_color_picker', 'id': 'ColorSelectorNg', 'size': [290, 290]}, 'animation': {'icon': 'light_addblankframe', 'id': 'AnimationDocker', 'size': []}, 'arrange': {'icon': '24_light_align-horizontal-center', 'id': 'ArrangeDocker', 'size': [100, 100]}, 'artisticColor': {'icon': 'light_wheel-sectors', 'id': 'ArtisticColorSelector', 'size': []}, 'comicsProject': {'icon': 'light_select-all', 'id': 'comics_project_manager_docker', 'size': []}, 'digitalColors': {'icon': 'light_krita_tool_gradient', 'id': 'DigitalMixer', 'size': []}, 'history': {'icon': 'light_fileLayer', 'id': 'History', 'size': []}, 'layers': {'icon': 'light_duplicatelayer', 'id': 'KisLayerBox', 'size': []}, 'lut': {'icon': 'light_color-to-alpha', 'id': 'LutDocker', 'size': []}, 'onionSkins': {'icon': 'light_onion_skin_options', 'id': 'OnionSkinsDocker', 'size': [100, 100]}, ...}
entry = 'presetChooser'

/home/rbear/.local/share/krita/pykrita/kanvasbuddy/kbpanelstack.py in loadPanel(self=<kanvasbuddy.kbpanelstack.KBPanelStack object>, data={'icon': 'light_paintop_settings_01', 'id': 'PresetDocker', 'size': [260, 335]})
56 ID = data['id']
57 if ID == 'PresetDocker': # This is ugly, but necessary until the Krita API opens a proper 'presetChanged' signal
58 pc = KBPresetChooser()
59 pc.presetSelected.connect(self.brushPresetChanged)
60 pc.presetClicked.connect(self.brushPresetChanged)
pc undefined
global KBPresetChooser = <class 'kanvasbuddy.kbpresetchooser.KBPresetChooser'>

/home/rbear/.local/share/krita/pykrita/kanvasbuddy/kbpresetchooser.py in init(self=<kanvasbuddy.kbpresetchooser.KBPresetChooser object>, parent=None)
23 super(KBPresetChooser, self).init(parent)
24 # Hide buttons deemed excessive for this plugin
25 self.layout().itemAt(0).widget().layout().itemAt(4).itemAtPosition(0,0).widget().hide()
26 self.layout().itemAt(0).widget().layout().itemAt(4).itemAtPosition(0,1).widget().hide()
27
self = <kanvasbuddy.kbpresetchooser.KBPresetChooser object>
self.layout =
).itemAt undefined
AttributeError: 'QWidgetItem' object has no attribute 'itemAtPosition'
cause = None
class = <class 'AttributeError'>
context = None
delattr = <method-wrapper 'delattr' of AttributeError object>
dict = {}
dir =
doc = 'Attribute not found.'
eq = <method-wrapper 'eq' of AttributeError object>
format =
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 =
le = <method-wrapper 'le' of AttributeError object>
lt = <method-wrapper 'lt' of AttributeError object>
ne = <method-wrapper 'ne' of AttributeError object>
new =
reduce =
reduce_ex =
repr = <method-wrapper 'repr' of AttributeError object>
setattr = <method-wrapper 'setattr' of AttributeError object>
setstate =
sizeof =
str = <method-wrapper 'str' of AttributeError object>
subclasshook =
suppress_context = False
traceback =
args = ("'QWidgetItem' object has no attribute 'itemAtPosition'",)
with_traceback =

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

Traceback (most recent call last):
File "/home/rbear/.local/share/krita/pykrita/kanvasbuddy/kanvasbuddy.py", line 56, in launchInterface
ui = uikanvasbuddy.UIKanvasBuddy(self)
File "/home/rbear/.local/share/krita/pykrita/kanvasbuddy/uikanvasbuddy.py", line 63, in init
self.initPanels(config['PANELS'], jsonData['panels'])
File "/home/rbear/.local/share/krita/pykrita/kanvasbuddy/uikanvasbuddy.py", line 83, in initPanels
self.panelStack.loadPanel(data[entry])
File "/home/rbear/.local/share/krita/pykrita/kanvasbuddy/kbpanelstack.py", line 58, in loadPanel
pc = KBPresetChooser()
File "/home/rbear/.local/share/krita/pykrita/kanvasbuddy/kbpresetchooser.py", line 25, in init
self.layout().itemAt(0).widget().layout().itemAt(4).itemAtPosition(0,0).widget().hide()
AttributeError: 'QWidgetItem' object has no attribute 'itemAtPosition'`

I hope that this can get fixed.
Thanks for sharing this plugin.

Just go to the line 25 and erase a coupe of lines, if you read in the file comments it will tell you that it hides some buttons. QWidgetItem doesn't have the attribute itemAtPosition and for a little research I did it seems QWidgetItem is from Qt.io a framework. After you comment(put the symbol # before the line) and save the file it will launch.