0
点赞
收藏
分享

微信扫一扫

【LUA】时间面板显示

刘员外__ 2024-02-20 阅读 10

定义方式

-- 定义一个对象
local myObject = {
    isVisible = false,
}

-- 定义对象的方法
function myObject:toggleShow()
    self.isVisible = not self.isVisible
    if self.isVisible then
        print("Object is now visible")
    else
        print("Object is now hidden")
    end
end

-- 调用对象方法
myObject:toggleShow()  -- 第一次调用,将显示 "Object is now visible"
myObject:toggleShow()  -- 第二次调用,将显示 "Object is now hidden"

在这个示例中,我们定义了一个名为 myObject 的对象,它有一个布尔属性 isVisible,初始值为 false。然后,我们使用 function obj:toggleShow() 语法定义了 toggleShow 方法,它会切换 isVisible 属性的值,并根据该值打印相应的消息。

调用对象方法时,我们使用了 : 运算符,它会自动传递对象本身作为第一个参数给方法。因此,myObject:toggleShow() 实际上等同于 myObject.toggleShow(myObject),这样方法内部就可以使用 self 关键字来访问对象的属性和方法。

应用:显示日期

local obj={}
obj.__index = obj
print("obj is:",obj)


function obj:init()
    obj.canvas = hs.canvas.new({x=0, y=0, w=0, h=0}):show()
    obj.canvas[1] = {
        type = "rectangle",
        action = "fill",
        fillColor = {hex="#000000", alpha=0.75}

    }
    obj.canvas[2] = {
        type = "text",
        text = "",
        textSize = 120,
        textAlignment = "center",
    }
    
end

function obj:toggleShow()
    if obj.timer then

        obj.timer:stop()
        obj.timer = nil
        obj.canvas:hide()
    else
        local time = os.date("%H:%M\n%A\n%Y-%m-%d")
        local cscreen = hs.screen.mainScreen()
        local cres = cscreen:fullFrame()
        obj.canvas:frame({
            x = cres.x+cres.w*0.15/2,
            y = cres.y+cres.h*0.30/2,
            w = cres.w*0.85,
            h = cres.h*0.50
        })
        obj.canvas[2].text = time
        obj.canvas:show()
        obj.timer = hs.timer.doAfter(2, function()
            obj.canvas:hide()
            obj.timer = nil

        end)
    end
end

obj:init()


hs.hotkey.bind({"alt"}, "t", function() obj.toggleShow(obj) end)

print("now obj:", obj)


return obj
举报

相关推荐

0 条评论