【问题标题】:Could someone explain how do buttons on widget work?有人可以解释小部件上的按钮是如何工作的吗?
【发布时间】:2022-03-18 05:49:05
【问题描述】:

我对如何做到这一点感到非常困惑。 Awesome 的文档对我来说根本不清楚,从 rc.lua 中获取的东西也没有帮助。我想做的就是在单击 textclock 小部件(使用 LMB)时弹出日历,但我不知道如何开始,因为文档没有示例(或者至少我花了 1 小时后找不到它谷歌搜索),而 rc.lua 中的每一行都有许多不同的行和参数,让我无能为力。

我的想法是

awful.button({}, 1, function() wibox.widget.calendar.year(os.date('*t')) end)

,但我不知道如何将它附加到 textclock 小部件。另外,我不太确定这是否会起作用(也就是说,在我设法将它附加到文本时钟之后)。我想避免添加太多我可以与之交互的小部件,并保持简单,尽可能少。

提前谢谢你,我希望我没有让任何人拔头发...

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: awesome-wm


【解决方案1】:

AwesomeWM 的“按钮”概念可以分为 2 个 API。首先是按钮小部件,它实际上并没有做太多,只是一个美化的wibox.widget.imagebox。这是与您的问题无关的部分。

另一个相关的部分是事件模型。当您单击一个小部件时,有两种方法可以让某些事情发生。第一个是信号。每个小部件都有一个button::pressbutton::releasemouse::entermouse::leave 信号。您可以通过这种方式将函数附加到信号:

mytextclock:connect_signal("button::press", function(self, lx, ly, button, mods, metadata)
   wibox.widget.calendar.year(os.date('*t'))
end)

该 API 比一个简单的按钮更丰富。您可以从awful.button 获得很多几何和布局信息。但是,对于简单的按钮来说它是多余的,因此awful.button

每个小部件在 AwesomeWM :buttons() 方法,在 AwesomeWM >= v4.4 中有一个 .buttons 对象属性。 rc.lua 中有几个示例说明如何向这些小部件添加一些 awful.buttons。以下是mylayoutbox 小部件的 sn-ps:

对于

    s.mylayoutbox:buttons(gears.table.join(
                           awful.button({ }, 1, function () awful.layout.inc( 1) end),
                           awful.button({ }, 3, function () awful.layout.inc(-1) end),
                           awful.button({ }, 4, function () awful.layout.inc( 1) end),
                           awful.button({ }, 5, function () awful.layout.inc(-1) end)))

对于 >= v4.4:

    s.mylayoutbox = awful.widget.layoutbox {
        screen  = s
    }

    s.mylayoutbox.buttons = {
        awful.button({ }, 1, function () awful.layout.inc( 1) end),
        awful.button({ }, 3, function () awful.layout.inc(-1) end),
        awful.button({ }, 4, function () awful.layout.inc(-1) end),
        awful.button({ }, 5, function () awful.layout.inc( 1) end),
    }

    -- That works too.
    s.mylayoutbox:add_button(awful.button({ }, 1, function () awful.layout.inc( 1) end))

至于文档中缺少示例。这是一个公平的观点。我会添加一些。

【讨论】:

  • 不幸的是,我仍然不知道如何在按下文本时钟时显示日历。我可能会暂时离开它,不要打扰。猜猜我现在只是在尝试一些太花哨的东西,因为我对 Awesome(和 Lua 也是)完全陌生。还没有弄清楚如何在按下“音量增大/音量减小”按钮时改变音量,所以我想这说明了我的知识,哈哈。
  • 您可能想通过 discord.gg/BPat4F87dg 加入 Discord 聊天服务器。 SackOverflow 格式可能不是处理这部分学习曲线的最佳方式。我想我已经回答了最初的问题。我想这里的问题是“如何访问时钟对象?在这种情况下,它在默认的rc.lua 中称为mytextclock。向时钟添加按钮与向布局框添加按钮几行相同在默认的rc.lua.
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 2021-05-11
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多