【LUA】时间面板显示

最近看了个HS的时间显示的例子,顺便学习了一下这个lua定义函数的方法,被折腾了许久,最后竟然是gpt解答了。

定义方式

-- 定义一个对象
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

你可能感兴趣的:(lua,junit,开发语言)