2017-03-06 41 views
0

我试图重新使用预定义的区域,但使用sikuli.setW()将其分配给新变量时出现Nonetype错误。这里是我的代码:Sikuli 1.1从现有区域创建新区域

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 

如果我print type(quarter),它返回NoneType

如果我把它变成这些:

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

它工作正常。我错过了什么?谢谢您的帮助。

回答

0

>我缺少什么?

一个目的方法可以不具有返回类型

下面是从Sikuli source code

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

返回类型摘录的运输及工务局局长是空隙。那就是什么也没有返回,而你期望它返回一个Region。

以正确的方式做你想做的是什么:

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