Golang GUI开发之Webview
本文介绍了如何在Go语言中创建一个简易的跨平台Webview应用。作者首先尝试了多种UI框架和库,如fyne、go-gtk等,但发现它们要么无法实现理想的界面效果,要么缺少某些关键功能。在不断的尝试过程中,发现了`webview/webview`包,它提供了一个浏览器壳子,可以使用各种CSS框架或Vue技术来实现想要的效果。然而,`webview/webview`不支持键盘操作,例如`command+c`、`command+v`和`command+a`等快捷键。为此,作者找到了一个临时的解决方案:在初始化时注入监听代码,以允许用户复制和粘贴文本,选择文件等。最后,通过使用`dialog`包和`webview/webview`库,实现了一个输入框和文件夹选择器的功能,并确保了代码的简洁性。

Golang GUI开发之Webview

学习Golang 也有一段时间了, 写爬虫、写命令行、写Web 都尝试过了, 简洁的语法强悍的协程写起什么东西都很得心应手,唯独在客户端这里有点受挫.

​首先日常电脑使用环境 Mac 和 Windows 经常切换,一些小工具也都考虑跨平台所以 自己开发小工具的时候都是考虑跨平台,结果显而易见并不是那么顺利.

尝试过fyne,go-gtk,go-sciter,wails,ui,QT 当然在https://awesome-go.com/#gui 这个上面的几乎都尝试了下,怎么来说呢,就是不太好用,要么不能达到想要的界面效果 要么缺少关键功能

好了言归正传,在不断的尝试过程中也有些发现,先说下`webview/webview`

这个包,就是一个浏览器壳子 里面套用HTML代码,使用各种CSS框架 或者VUE等技术都可以实现想要的效果 wails就是用这个封装的,不过现在的版本不在支持各种系统API调用, 例如: 文件选择,文件夹选择 闲逛github的时候发现了一个跨平台简易的包

github.com/sqweek/dialog支持文件选择,对话框,文件夹选择,简单的API封装结合 webview/webview用可以达到想要的效果,在然后就是在webview/webview渲染出来的HTML不支持键盘操作, 例如: command+c,command+v,command+a等等, 这个在webview/webview的issuse下发现有人也提出了疑问,而且在下面找到了一个临时的解决方案就是初始化的时候注入监听代码如下:

const copyPasteShortcut = `
            window.addEventListener("keypress", (event) => {
                if (event.metaKey && event.key === 'c') {
                    document.execCommand("copy")
                    event.preventDefault();
                }
                if (event.metaKey && event.key === 'v') {
                    document.execCommand("paste")
                    event.preventDefault();
                }
                if (event.metaKey && event.key === 'a') {
                    document.execCommand("selectAll")
                    event.preventDefault();
              	}
                
            })
            `

    w.Eval(copyPasteShortcut)

下图就是我想实现的效果啦,一个输入框,一个文件夹选择器,如果本篇文章对您有帮助,那么我也会很高兴,感谢!

xiaoguo.png

用到的包:

  1. [http://github.com/sqweek/dialog](http://github.com/sqweek/dialog)

Simple cross-platform dialog API for go-lang

examples

ok := dialog.Message("%s", "Do you want to continue?").Title("Are you sure?").YesNo()
filename, err := dialog.File().Filter("Mp3 audio file", "mp3").Load()
directory, err := dialog.Directory().Title("Load images").Browse()
  1. [http://github.com/webview/webview](http://github.com/webview/webview)

    A tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs. Also, there are Rust bindings, Python bindings, Nim bindings, Haskell, C# bindings and Java bindings available.

    The goal of the project is to create a common HTML5 UI abstraction layer for the most widely used platforms.

    It supports two-way JavaScript bindings (to call JavaScript from C/C++/Go and to call C/C++/Go from JavaScript).

    It uses Cocoa/WebKit on macOS, gtk-webkit2 on Linux and Edge on Windows 10.

    package main
    
    import "github.com/webview/webview"
    
    func main() {
        debug := true
        w := webview.New(debug)
        defer w.Destroy()
        w.SetTitle("Minimal webview example")
        w.SetSize(800, 600, webview.HintNone)
        w.Navigate("https://en.m.wikipedia.org/wiki/Main_Page")
        w.Run()
    }
    
咻兔哔
咻兔哔·2021年6月22日

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处

推荐文章

Macos Firefox 开启垂直侧边栏和隐藏顶部标签
其他技术

Macos Firefox 开启垂直侧边栏和隐藏顶部标签

本文介绍了如何在Mac上安装并自定义浏览器的垂直标签页和样式。首先,通过插件市场安装`Sidebery`插件,然后创建`userChrome.css`文件并添加自定义样式。接着,配置`chrome`文件夹的位置,并将`userChrome.css`文件放置到该目录内。最后,根据需要调整标题栏、侧边栏、工具栏等元素的样式。

5月26日122
给项目的GIT目录瘦瘦身
其他技术

给项目的GIT目录瘦瘦身

文章介绍了一系列操作步骤,包括查找大文件、删除指定大文件、重新标记过期缓存文件、回收过期缓存、重新用命令查看文件大小以及重新提交瘦身远程仓库。这些步骤旨在优化存储空间和提高系统性能。

3月21日40
Jetbrains Idea 2019.3.5 不能识别GOROOT SDK版本的解决办法
其他技术

Jetbrains Idea 2019.3.5 不能识别GOROOT SDK版本的解决办法

Jetbrains IDE 2019.3.5无法识别GOROOT SDK版本的问题,解决方法如下:1.进入Go的sdk src/runtime/internal/sys目录。2.编辑zversion.go文件,将go1.17替换成当前版本。参考资料:- https://blog.csdn.net/u011243684/article/details/123865556- https://youtrack.jetbrains.com/issue/GO-11588#focus=Comments-27-5127829.0-0

5月3日34
删除Xcode后git命令无法使用的解决办法
其他技术

删除Xcode后git命令无法使用的解决办法

删除Xcode后,Git命令无法使用,可以通过以下步骤解决:首先确认机器上是否安装了CommandLineTools,如果没有,可以使用命令行或苹果开发者网下载安装。然后执行`xcode-select --switch /Library/Developer/CommandLineTools`,指定新的Xcode路径。最后在终端执行`git –version`检查Git版本信息。

4月15日52