MujicaUI

Date & Time · #057

MonthPicker 浅色主题渲染快照
浅色 · 渲染快照
MonthPicker 深色主题渲染快照
深色 · 渲染快照

057 MonthPicker · 月份选择器

用途

按年份分页选择月份。

最小示例

var month datetime.YearMonth
view := func(c *ui.Context) {
	core.Use(c, core.Settings{})
	opts := datetime.MonthPickerOptions{Label: "Billing month", Clearable: true}
	if datetime.MonthPicker(c, &month, opts).Changed() {
		fmt.Println("month", month)
	}
}
ui.Render(view, 400, 300, 1)

参数

func MonthPicker(c *ui.Context, value *YearMonth, opts MonthPickerOptions) DateTimeResult,返回值的 Element 字段是组件元素。

字段类型默认值含义
MinYearMonth零值最早月份。
MaxYearMonth零值最晚月份。
DisableMonthfunc(YearMonth) boolnil不可选月份。
Clearableboolfalse有值时显示清空按钮。
TodayDate零值(系统时钟)标记当前月份。
ReadOnlyboolfalse只读:可聚焦、可复制(Cmd/Ctrl+C),不能修改,不打开弹层。
Disabledboolfalse禁用。
Labelstring内置“选择月份”辅助技术名称。

状态

默认、悬停、聚焦、选中(酒红填充 + 内嵌细框)、当前月(加粗 + 菱形)、不可选(删除线)、禁用。

事件

Changed():选择或清空导致值变化时为 true。

键盘操作

  • Enter/Space/↓:打开。
  • ←/→:前后一月;↑/↓:前后三月(一行)。
  • PageUp/PageDown:上/下一年。
  • Home/End:一月/十二月。
  • Enter:选择并关闭;Escape:关闭。

限制

  • 键盘移到不可选月份时焦点保持在原处,可继续移动。
  • 日期与时间值不带时区:Date、YearMonth、TimeOfDay 只保存日历字段,组件内部计算不做 UTC 转换。
  • Today 为零值时读取 c.Now()(系统本地时区);需要固定“今天”(测试、跨时区应用)时显式传入。
  • 无障碍:MyGo v0.2.10 没有公开设置弹出按钮展开状态(expanded)、数值范围(hasRange/accRange)与值(accValue)的接口,这些字段只在 MyGo 内部组件中赋值(ui/element.go:286-295,例如 ui/base.go:297、ui/indicators.go:61)。因此触发器只能声明为 RolePopUpButton 而无法报告展开状态;时间段以 Description 读出当前值与范围,错误通过 Error() 关联。