0

我试图重用预定义区域,但在使用sikuli.setW(). 这是我的代码:

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)

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

4

1 回答 1

0

> 我错过了什么?

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

这是Sikuli源代码的摘录

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

setW 的返回类型是void。那就是它什么都不返回,而您期望它返回一个区域。

做你想做的事情的正确方法是:

self.quarter = Region(self.leftreg) # this constructs a new region
self.quarter.setW(int(math.floor(self.leftreg.w/2)))  # and this resizes it
于 2017-05-03T22:56:31.883 回答