This forum has been archived. All content is frozen. Please use KDE Discuss instead.

Python: action 'selectopaque' precedes commands preceding it

Tags: None
(comma "," separated)
saedjubarin
Registered Member
Posts
58
Karma
0
I'm trying to crop the image to all the visible pixels in all layers, so I try to do it like this:

Code: Select all
doc = app.activeDocument()
doc.setActiveNode(doc.topLevelNodes()[-1])
doc.nodeByName("Background").setVisible(False)
doc.refreshProjection()
app.action('select_all').trigger()
doc.refreshProjection()
app.action('copy_merged').trigger()
app.action('edit_paste').trigger()
doc.refreshProjection()
app.action('deselect').trigger()
doc.setActiveNode(doc.topLevelNodes()[-1]) # select the pasted layer just in case even though it should do it automatically
doc.waitForDone() # tried waiting for "done"
doc.refreshProjection() # tried refreshing projection
doc.setActiveNode(doc.topLevelNodes()[-2]) # tried to switch layers
doc.setActiveNode(doc.topLevelNodes()[-1])
import time
time.sleep(1.2) # and even tried waiting for a while
app.action('selectopaque').trigger()
# let's not crop until it works.
#doc.crop(doc.selection().x(),doc.selection().y(),doc.selection().width(),doc.selection().height())


For some reason 'selectopaque' selects from a layer below the merged layer.
saedjubarin
Registered Member
Posts
58
Karma
0
Ok it seems like it takes a while to get the selection and maybe it's done in a different thread or something I don't know but this works:

Code: Select all
doc = app.activeDocument()
doc.setActiveNode(doc.topLevelNodes()[-1])
doc.nodeByName("Background").setVisible(False)
app.action('select_all').trigger()
doc.refreshProjection()
app.action('copy_merged').trigger()
app.action('edit_paste').trigger()
app.action('deselect').trigger()
doc.refreshProjection()
import time
time.sleep(0.001)
app.action('selectopaque').trigger()
time.sleep(0.001)
app.action('selectopaque').trigger()
time.sleep(0.001)
app.action('selectopaque').trigger()
time.sleep(0.001)
app.action('selectopaque').trigger()
time.sleep(0.001)
app.action('selectopaque').trigger()
time.sleep(0.001)
app.action('selectopaque').trigger()
time.sleep(0.001)
doc.crop(doc.selection().x(),doc.selection().y(),doc.selection().width(),doc.selection().height())


Looks a bit silly though doesn't it?
saedjubarin
Registered Member
Posts
58
Karma
0
Sometimes Krita crashes while doing this. I also get inconsistent crops.
User avatar
rbreu
Registered Member
Posts
52
Karma
0
Try "doc.waitForDone()"?
saedjubarin
Registered Member
Posts
58
Karma
0
rbreu wrote:Try "doc.waitForDone()"?


I have one of those there before the selectopaque already.. but yeah, maybe I'll add those as friends for the sleeps.


Bookmarks



Who is online

Registered users: Bing [Bot], claydoh, Evergrowing, Google [Bot], rblackwell