这就是这种情况:假设我有一个文本框,希望将其精确地放置在屏幕的右侧,但仍然让该文本框保留其自己的尺寸。换句话说,我只想指定字体,让文本框选择合适的尺寸,然后将其放置在屏幕的边缘。如果我知道尺寸,那真的很容易,从那时起我就可以做到
local awful = require("awful")
local wibox = require("wibox")
local text_widget = wibox.widget({
widget = wibox.widget.textbox,
font = "Roboto Medium 15",
text = "hello world",
})
local rightmost_place = wibox.widget({
layout = wibox.layout.manual,
{
text_widget,
point = {
y = 0,
-- You can't actually do the `text_widget.geometry.width`
x = awful.screen.focused().geometry.width
- text_widget.geometry.width
},
-- We're not setting these so the textbox
-- will get its size automatically
-- forced_width =
-- forced_height =
},
})
这样,每当我输入一些内容时,文本框都会变大,但会根据x
坐标自动重新定位。
此外,这不仅涉及文本框。我在其他小部件上也遇到了同样的问题,所以我的问题是:是否有某种方法可以让小部件获取它们喜欢的尺寸,但仍然可以使它们的几何形状重新定位到您想要的位置?
答案 0 :(得分:0)
问题是小部件可以同时放置在多个位置(具有多个大小)。这对于某些情况(例如文本时钟)在所有屏幕上都具有单个实例(带有单个计时器)很有用。这使得获取尺寸有些棘手。如果您不打算在多个位置使用小部件,则可以作弊并添加width / height属性。
-- in the declarative syntax, add an `id`
id = `id_of_the_widget_with_size`,
-- Get the widget (somewhere outside of the declarative section)
local w = rightmost_place:get_children_by_id("id_of_the_widget_with_size")[1]
w._real_draw = w.draw
w.draw = function(self, context, cr, width, height)
self.width, self.height = width, height
w._real_draw(self, context, cr, width, height)
end
现在,从理论上讲,该小部件将具有width
和height
属性。