Sikuli 1.1从现有区域创建一个新区域

时间:2017-03-06 03:47:39

标签: python sikuli sikuli-script

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

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)

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

1 个答案:

答案 0 :(得分:0)

&GT;我错过了什么?

对象方法可能没有返回类型

以下是Sikuli source code

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

setW的返回类型为 void 。也就是说什么都不返回,而你期望它返回一个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