2017-03-06 10 views
0

Ich versuche, vordefinierte Regionen wiederzuverwenden, aber ich erhalte einen Non-Type-Fehler, wenn ich ihn einer neuen Variablen unter Verwendung von sikuli.setW() zuweise. Hier ist mein Code:Sikuli 1.1 Eine neue Region aus einer bestehenden Region erstellen

import math 
import sikuli 

self.screen_reg = sikuli.Screen(0) 
self.monitor_reg = self.screen_reg 

self.leftreg = sikuli.Region(
    self.monitor_reg.x, 
    self.monitor_reg.y, 
    int(math.floor(self.monitor_reg.w/2)), 
    self.monitor_reg.h) 

self.rightreg = sikuli.Region(
    self.monitor_reg.x + int(math.floor(self.monitor_reg.w/2)), 
    self.monitor_reg.y, 
    int(math.floor(self.monitor_reg.w/2)), 
    self.monitor_reg.h) 

self.leftreg.highlight(3) <=== working 

self.quarter = self.leftreg.setW(int(math.floor(self.leftreg.w/2))) 

self.quarter.highlight(3) <====== didnt work; 

error: NoneType object has no attribute highlight 

Wenn ich print type(quarter), es gibt NoneType.

Wenn ich es in diese ändern:

self.leftreg.highlight(3) 
self.leftreg.setW(int(math.floor(self.leftreg.w/2))) 
self.leftreg.highlight(3) 

Es funktioniert gut. Was vermisse ich? Danke für die Hilfe.

Antwort

0

> Was fehlt mir?

Eine Objektmethode darf nicht Rückgabetyp haben.

Hier Auszug aus Sikuli source code

public void setW(int W) { 
    w = W > 1 ? W : 1; 
    initScreen(null); 
    } 

Rückgabetyp von setw Leere ist. Das ist es gibt nichts zurück, während Sie erwartet haben, dass es eine Region zurückgibt.

Eine richtige Art und Weise zu tun, was Sie würden wollen:

self.quarter = Region(self.leftreg) # this constructs a new region 
self.quarter.setW(int(math.floor(self.leftreg.w/2))) # and this resizes it