fyne时间选择框-自定义组件,带绑定

实现的效果如图

自定义组件代码:

go 复制代码
package widget

import (
	"fmt"
	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/widget"
	"strconv"
	"time"
)

var timeLayout = "15:04"

type SelectTime struct {
	Container *fyne.Container
}

func NewSelectTime(startTime time.Time, endTime time.Time, fun func(t *time.Time, t2 *time.Time)) *SelectTime {
	picker := &SelectTime{}
	// 创建分隔符标签
	// 创建小时、分钟、秒的选择框
	startHourW := widget.NewSelectEntry(generateOptions(0, 23))
	startHourW.Text = strconv.Itoa(startTime.Hour())

	startMinuteW := widget.NewSelectEntry(generateOptions(0, 59))
	startMinuteW.Text = strconv.Itoa(startTime.Minute())

	endHourW := widget.NewSelectEntry(generateOptions(0, 23))
	endHourW.Text = strconv.Itoa(endTime.Hour())

	endMinuteW := widget.NewSelectEntry(generateOptions(0, 59))
	endMinuteW.Text = strconv.Itoa(endTime.Minute())

	var onChangeUpdate = func(s string) {
		startTime, _ := time.Parse(timeLayout, startHourW.Text+":"+startMinuteW.Text)
		endTime, _ := time.Parse(timeLayout, endHourW.Text+":"+endMinuteW.Text)
		fun(&startTime, &endTime)
	}

	startHourW.OnChanged = onChangeUpdate
	startMinuteW.OnChanged = onChangeUpdate
	endHourW.OnChanged = onChangeUpdate
	endMinuteW.OnChanged = onChangeUpdate

	// 创建时间选择器容器
	picker.Container = container.NewHBox(
		startHourW,
		widget.NewLabel(":"),
		startMinuteW,
		widget.NewSeparator(),
		endHourW,
		widget.NewLabel(":"),
		endMinuteW,
	)
	return picker
}

// generateOptions 生成从 start 到 end 的数字选项
func generateOptions(start, end int) []string {
	options := make([]string, end-start+1)
	for i := start; i <= end; i++ {
		options[i-start] = fmt.Sprintf("%02d", i)
	}
	return options
}

使用时候,引用代码:

go 复制代码
selectTime := widget2.NewSelectTime(time.Now(), time.Now(), func(t *time.Time, t2 *time.Time) {
			updateTimeStr := t.Format("15:04") + "-" + t2.Format("15:04")
			log.Println("现在时间是", updateTimeStr)
			_ = externalString.Set(updateTimeStr)
		})
相关推荐
Mgx1 天前
你知道程序怎样优雅退出吗?—— Go 开发中的“体面告别“全指南
go
光头闪亮亮2 天前
电子发票解析工具-golang服务端开发案例详解
go
Mgx2 天前
从“CPU 烧开水“到优雅暂停:Go 里 sync.Cond 的正确打开方式
go
GM_8283 天前
从0开始在Go当中使用Apache Thrift框架(万字讲解+图文教程+详细代码)
rpc·go·apache·thrift
Kratos开源社区3 天前
别卷 LangChain 了!Blades AI 框架让 Go 开发者轻松打造智能体
go·agent·ai编程
Kratos开源社区3 天前
跟 Blades 学 Agent 设计 - 01 用“提示词链”让你的 AI 助手变身超级特工
llm·go·agent
百锦再3 天前
第10章 错误处理
java·git·ai·rust·go·错误·pathon
Mgx4 天前
从 4.8 秒到 0.25 秒:我是如何把 Go 正则匹配提速 19 倍的?
go
遥天棋子5 天前
实战PaddleOCR自动识别车位坐标并渲染可点击按钮
go
久违 °5 天前
【安全开发】Nuclei源码分析-任务执行流程(三)
安全·网络安全·go