精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

GoUI:一個非常簡單的 GUI 框架

開發 前端
最近,我一直想開發一些桌面(主要是 Windows,但也可以考慮 MacOS 或 Linux)應用程序。雖然 Go 不是開發 UI 應用程序時首選語言,但是該語言的簡單性和健壯性仍然使它成為我的首選語言。是的,這是我的錘子(hammer)... 但這是一個該死的漂亮錘子。

最近,我一直想開發一些桌面(主要是 Windows,但也可以考慮 MacOS 或 Linux)應用程序。雖然 Go 不是開發 UI 應用程序時首選語言,但是該語言的簡單性和健壯性仍然使它成為我的首選語言。是的,這是我的錘子(hammer)... 但這是一個該死的漂亮錘子。

[[344583]]

以前,我曾將 Ebiten 圖形庫用于 Go,以便與孩子們一起編寫一些游戲。但是,對于一般的“應用程序”開發(即需要“小部件 widgets”,例如按鈕,菜單等),Ebiten 并非真的適合。因此,我一直在尋找可以使用的 Go UI 庫。然而大多數都使用 cgo,但我真的希望我的應用程序是純 Go。這純粹是個人喜好,我不知道使用 cgo 而不是純 Go 會有什么影響。如果我要使用 cgo,我認為首選的 UI 庫肯定是 Fyne[1]。Fyne 看起來是一個非常全面的框架,如果您不介意 cgo,我絕對會建議你看看看 Fyne。

還有其他一些庫,但沒有吸引我。他們說你永遠不應該編寫自己的安全性代碼,并且我也相信你不應該編寫自己的 UI 庫。但是我忽略了這個建議...

因此,我寫了一個 GoUI[2] !!

這純粹是那些“抓癢”的項目之一。雖然現在還很早,但 UI 庫的基本知識(由 Ebiten 進行實際渲染)正在慢慢融合。在詳細介紹下面細節之前,我想先說明一下,我認為程序在 CLI 達到了頂峰。其次,我不是 UI 編程人員……寫這些是我個人的興趣。

GoUI 的基本思想是兩種類型的圖形元素。一個是可以包含其他面板或小部件的面板(Panel)。另一個是小部件,它是基本的 UI 元素(按鈕,文本輸入等)。我們目前使用的面板類型有 HPanel(水平添加)和 VPanel(我讓你猜)。從技術上講,我們確實有其他面板,例如工具欄,但這實際上只是 HPanel,需要一點點定制工作。總體而言,如果我可以結合其他現有面板/小工具來構造一些“新”東西,那么我會做的。如果我需要優化或與已有產品脫節,那么我將做一些全新的事情。

我們目前擁有的小部件是:

  • ImageButton:(由應用程序提供的單擊/未單擊的圖像)。
  • TextButton:基本的彩色矩形,其中包含您想要的任何文本。
  • Checkbox:與 TextButton 相同,但是旁邊有一個小方框,可以打對勾。
  • EmptySpace:完全由我控制。用于強制其他小部件之間的空間。一旦添加適當的填充,該填充可能會消失。
  • Label:文本標簽,不能輸入。
  • Text Input:文本輸入框。
  • RadioButtonGroup:這是一個面板,其中包含 vpanel 或 hpanel(取決于標志),然后其中包含許多復選框。復選框將圖像(帶有刻度)替換為常規的單選按鈕。這是重新使用現有窗口小部件的好例子。如果事實證明我需要對復選框進行足夠的修改以使其不適合用作單選按鈕,那么我將不得不放入一個真正的單選按鈕。但是目前,它運行良好。

我還沒有完成菜單,模態窗口等,但是正如我所說的……這還是早期。

現在,讓我們嘗試一個超級簡單的 Demo。

  1. package main 
  2.  import ( 
  3.     "github.com/hajimehoshi/ebiten" 
  4.     "github.com/kpfaulkner/goui/pkg" 
  5.     "github.com/kpfaulkner/goui/pkg/widgets" 
  6.     log "github.com/sirupsen/logrus" 
  7.     "image/color" 
  8. ) type MyApp struct { 
  9.     window pkg.Window} func NewMyApp() *MyApp { 
  10.     a := MyApp{}    a.window = pkg.NewWindow(800, 600, "test app"falsefalse
  11.     return &a 
  12. } func (m *MyApp) SetupUI() error { 
  13.     vPanel := widgets.NewVPanel("main vpanel", &color.RGBA{0, 0, 0, 0xff}) 
  14.     m.window.AddPanel(vPanel)    button1 := widgets.NewTextButton("text button 1""my button1"true, 0, 0, nil, nil, nil, nil) 
  15.     vPanel.AddWidget(button1)    return nil 
  16. } func (m *MyApp) Run() error { 
  17.     m.SetupUI()    ebiten.SetRunnableInBackground(true
  18.     ebiten.SetWindowResizable(true
  19.     m.window.MainLoop()    return nil 
  20. } func main() { 
  21.     log.SetLevel(log.DebugLevel)    app := NewMyApp()    app.Run()} 

讓我們解釋一下以上代碼。

首先,該程序的核心仍然是直接調用 Ebiten。這些尚未封裝。因此,你將在 main 和 Run 函數中看到,我們基本上已經制作了 MyApp 結構的實例,然后調用 SetupUI,設置一些 Ebiten 標志,然后調用 MainLoop。

NewMyApp 函數調用 pkg.NewWindow 函數。這是應用程序的主窗口。一旦添加了模態/其他窗口,這可能會更改,但是就目前而言,這將創建給定大小的主 UI 窗口。

SetupUI 是你需要注意的地方。我們要做的第一件事是創建一個 VPanel。請記住,VPanel 把小部件垂直堆疊放置。我們將 vPanel 添加到主窗口。實際上(當前),我們應該只在主窗口中添加 1 個面板,其他所有內容都應放入該面板中。因此,在這種情況下,我們創建 button1(新的 TextButton)并將其添加到 vPanel。

 

GoUI:一個非常簡單的 GUI 框架

花點時間來學習理解一下上面的 UI 技能。

下面,讓我們做一些更有趣的事情。假設我們要在按下按鈕時做出響應。創建 TextButton 的行是:

  1. button1 := widgets.NewTextButton("text button 1""my button1"true, 0, 0, nil, nil, nil, nil) 

所有細節就不描述了,但是最后一個參數是帶有 func (event IEvent) error簽名的事件處理程序。因此,如果我們創建一個帶有該簽名的方法,并將其作為最后一個參數傳遞給 NewTextButton。

  1. func (m *MyApp) ButtonAction1(event events.IEvent) error { 
  2.     log.Debugf("My button1 action 1!!!"
  3.     return nil 

然后我們將按鈕創建修改為

  1. button1 := widgets.NewTextButton("text button 1""my button1"true, 0, 0, nil, nil, nil, m.ButtonAction1) 

現在,當單擊按鈕時,將調用 ButtonAction1 函數,我們可以觸發所需的任何功能。

是不是很簡單。

現在,如果我想要在按鈕旁邊放點東西該怎么辦?我們在這里要做的是創建一個 HPanel,并將其首先放入 VPanel。然后,將按鈕添加到 HPanel。如果這樣做,我們最終將得到如下代碼:

  1. func (m *MyApp) SetupUI() error { 
  2.      vPanel := widgets.NewVPanel("main vpanel", &color.RGBA{0, 0, 0, 0xff}) 
  3.     m.window.AddPanel(vPanel) 
  4.      hPanel := widgets.NewHPanel("hpanel1", &color.RGBA{0, 100, 0, 255}) 
  5.     vPanel.AddWidget(hPanel) 
  6.      button1 := widgets.NewTextButton("text button 1""my button1"true, 0, 0, nil, nil, nil, m.ButtonAction1) 
  7.     hPanel.AddWidget(button1) 
  8.      return nil} 

從視覺上看,什么都不會改變。我們仍然只顯示 1 個小部件。

現在,如果我們在同一 HPanel 中添加一個復選框怎么辦?

  1. func (m *MyApp) SetupUI() error { 
  2.      vPanel := widgets.NewVPanel("main vpanel", &color.RGBA{0, 0, 0, 0xff}) 
  3.     m.window.AddPanel(vPanel) 
  4.      hPanel := widgets.NewHPanel("hpanel1", &color.RGBA{0, 100, 0, 255}) 
  5.     button1 := widgets.NewTextButton("text button 1""my button1"true, 0, 0, nil, nil, nil, m.ButtonAction1) 
  6.     hPanel.AddWidget(button1) 
  7.      cb1 := widgets.NewCheckBox("my checkbox1""check me please""""", nil) 
  8.     hPanel.AddWidget(cb1) 
  9.      vPanel.AddWidget(hPanel) 
  10.     return nil} 

因此,與之前完全相同,但只有這額外的兩條:創建復選框,然后添加到 hPanel。

現在 UI 看起來是這樣:

 

GoUI:一個非常簡單的 GUI 框架

現在不擔心這里的間距了。

現在讓我們在 TextButton 下面添加一個 ImageButton。這意味著我們將向 vPanel 添加第二項(第一項是 hPanel)

  1. imageButton := widgets.NewImageButton("ib1""images/pressedbutton.png""images/nonpressedbutton.png",nil ) 
  2. vPanel.AddWidget(imageButton) 

這是效果如下:

 

GoUI:一個非常簡單的 GUI 框架

這時,我們有了 2 張圖片(屏幕截圖中只顯示了一張)。按下按鈕時一個,不按下時一個(只更改了陰影)。懂了吧。

好了,介紹就這么多。雖然該 UI 庫還不完善,但 GUI 的基本功能已經可以實現了。再次放上該庫的地址:https://github.com/kpfaulkner/goui。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2016-09-14 17:48:44

2017-06-08 15:53:38

PythonWeb框架

2024-07-02 11:29:28

Typer庫Python命令

2014-05-23 10:37:37

聊天程序PHP聊天程序

2024-04-01 05:00:00

GUIpythonDearPyGui

2011-03-24 09:34:41

SPRING

2024-05-09 08:08:32

SpringBinderJava

2025-01-08 06:00:00

Argus開源安全檢查工具

2025-01-07 13:00:00

日志分析平臺Graylog網絡安全

2013-04-23 14:32:28

創業創業者Mark Suster

2023-10-26 00:30:00

Excel開源框架

2009-08-19 04:14:00

線性鏈表

2023-02-07 10:40:30

gRPC系統Mac

2018-11-22 14:09:45

iOS架構組件開發

2009-07-14 16:02:42

JDBC例子

2020-11-09 06:38:00

ninja構建方式構建系統

2021-06-28 13:45:10

KTorrentBitTorrentLinux

2011-09-08 13:41:53

Widget

2019-11-07 14:00:36

MySQL數據庫SQL

2017-08-17 16:37:59

MySQL數據遷移
點贊
收藏

51CTO技術棧公眾號

五月天视频一区| 成人v精品蜜桃久久一区| www日韩欧美| 久久av一区二区三| 亚洲天堂导航| 自拍偷在线精品自拍偷无码专区| 99re在线播放| 中文字幕手机在线视频| 91成人超碰| 精品亚洲一区二区| 久久6免费视频| www.色在线| 国产精品久久久久久久裸模| 国产成人av一区二区三区| 无码人妻精品一区二| 911久久香蕉国产线看观看| 亚洲国产精品久久久| 亚洲高清免费在线观看| 91九色在线播放| 国产精品国产a| 久久久www免费人成黑人精品| 亚洲无码久久久久| 亚洲一区成人| 欧美黄色片免费观看| 亚洲色图日韩精品| 三级小说欧洲区亚洲区| 日韩精品在线看片z| 国产九九在线视频| 国模套图日韩精品一区二区| 亚洲综合色婷婷| 亚洲一区美女| 国内精品一区视频| 菠萝蜜视频在线观看一区| 国产综合在线观看视频| 蜜臀99久久精品久久久久小说| 在线欧美日韩| 欧美美女操人视频| 日韩av毛片在线观看| 婷婷精品视频| 亚洲成**性毛茸茸| 日本黄色大片在线观看| 亚洲成人毛片| 欧美日韩精品欧美日韩精品一综合| 久草青青在线观看| h片在线观看视频免费| 亚洲最新视频在线播放| 成年人三级视频| 美女羞羞视频在线观看| 国产精品每日更新| 午夜精品亚洲一区二区三区嫩草 | 亚洲第一男人天堂| 免费看91视频| 国产66精品| 精品国产一区久久| 欧美熟妇精品一区二区| 亚洲精品一二三**| 精品三级在线看| 国产人妖在线观看| 精品国产亚洲一区二区三区大结局| 欧美日韩亚洲综合| www.久久久精品| 祥仔av免费一区二区三区四区| 欧美日韩中文字幕一区| 99热一区二区| 少妇高潮一区二区三区99| 欧美二区在线观看| 红桃视频 国产| 欧美成年网站| 亚洲高清久久久久久| 国产又粗又长又爽| 久久不见久久见免费视频7| 亚洲欧美日韩网| 国产精品理论在线| 亚洲不卡av不卡一区二区| 欧美成人精品xxx| 中文字幕一区二区三区手机版 | 孩娇小videos精品| 超碰国产精品一区二页| 日韩欧美国产高清| 久久无码人妻精品一区二区三区| 国产99久久久国产精品成人免费| 一区二区三区视频在线| 黑鬼狂亚洲人videos| 欧美激情性爽国产精品17p| 91国产高清在线| jizz国产在线| 国产精品综合二区| 久久精品女人的天堂av| 成人性爱视频在线观看| 中文字幕一区二区三区在线播放| 日韩亚洲欧美一区二区| 中文在线免费视频| 欧美麻豆精品久久久久久| 国产无套精品一区二区三区| 美女少妇全过程你懂的久久| 日韩在线精品一区| 国产真实的和子乱拍在线观看| 麻豆精品91| 成人精品视频99在线观看免费| 全国男人的天堂网| 国产精品乱子久久久久| 日韩视频免费播放| 麻豆久久久久| 日韩久久精品成人| 欧美第一页在线观看| 国产亚洲一区在线| 91美女片黄在线观看游戏| 网站黄在线观看| 国产午夜精品理论片a级大结局| 99精品视频网站| 一二三四视频在线中文| 日韩一级在线观看| 日韩不卡av在线| 一区二区高清| 97伦理在线四区| gogogo高清在线观看免费完整版| 亚洲第一精品在线| 亚洲最大天堂网| 亚洲精品国产精品粉嫩| 欧美肥老妇视频| 亚洲一区中文字幕永久在线| 91色porny| 真实国产乱子伦对白视频| 成人国产精品入口免费视频| 日韩成人av在线播放| 欧美三根一起进三p| 免费久久99精品国产| 久久久久久久久一区| 福利写真视频网站在线| 欧美精品一二三区| 五月激情四射婷婷| 老司机一区二区三区| 国产精品久久久久久久久婷婷 | 欧美军人男男激情gay| 久久久久久久爱| www.国产黄色| 亚洲欧美日本在线| 色播五月综合网| 日韩美女一区二区三区在线观看| 国产精品草莓在线免费观看| 色哟哟在线观看| 偷窥少妇高潮呻吟av久久免费| 伊人久久久久久久久| 欧美日韩1区| 91黄在线观看| h片在线免费| 日韩一级高清毛片| 欧美卡一卡二卡三| 国产精品18久久久久久vr| 99亚洲精品视频| 精品视频一二| 九九热这里只有在线精品视| 国产老妇伦国产熟女老妇视频| 亚洲欧洲日产国产综合网| 想看黄色一级片| 亚洲欧美亚洲| 国产精品theporn88| 好看的中文字幕在线播放| 精品国产一区二区三区av性色| 久久久久久久久精| 成人av在线播放网站| 欧美久久久久久久久久久久久| 牛牛影视一区二区三区免费看| 91av在线免费观看视频| 久久天堂电影| 欧美日韩另类一区| 欧美一区免费观看| 国产精品一二一区| www.日本在线播放| 伊人久久大香线蕉av不卡| 国产成人精品免费视频| 在线视频二区| 欧美成人a∨高清免费观看| 国产又大又黑又粗免费视频| 91视视频在线观看入口直接观看www | 国内精品免费视频| 亚洲久久一区| 日本一区二区精品视频| 日韩在线激情| 午夜精品久久久久久久久久久久 | av自拍一区| 欧美一区二区色| av黄色在线观看| 欧美va亚洲va| 无码人妻丰满熟妇精品区| 亚洲欧洲精品天堂一级| 午夜免费福利影院| 青青草国产成人99久久| 久久香蕉视频网站| 日韩欧美ww| 91久久久久久久久久| 阿v视频在线| 色999日韩欧美国产| 亚洲国产精品一| 欧美视频一区在线| 国产一级特黄视频| 国产精品美日韩| 五月天激情小说| 激情综合一区二区三区| 久久精品国产sm调教网站演员| 欧美电影一区| 欧美极品一区二区| 日韩成人在线观看视频| 国产精彩精品视频| 波多野结衣精品| 色噜噜狠狠狠综合曰曰曰| 欧美亚洲精品在线观看| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日本妇女毛茸茸| 国产欧美日韩综合| yy6080午夜| 国产一区二区三区在线观看免费 | 久久精品五月天| 亚洲一区视频在线| 亚洲 欧美 国产 另类| www久久精品| 亚洲国产精品第一页| 久久精品国产网站| 国产性生交xxxxx免费| 亚洲黄色成人| www.亚洲成人网| 亚洲精品tv久久久久久久久久| 亚洲电影第1页| 免费看国产曰批40分钟| 国产一区二区三区四区二区| 极品日韩久久| 一本色道69色精品综合久久| 国产精品日韩在线观看| 亚洲精品成人图区| 久久精品视频va| 国产毛片av在线| 亚洲欧美日韩另类| 日本在线丨区| 亚洲精品自拍视频| 欧日韩在线视频| 日韩精品中午字幕| 性欧美videos另类hd| 欧美精品aⅴ在线视频| 依依成人在线视频| 欧美久久久久久蜜桃| 中文在线观看免费高清| 欧美在线观看一区| 日本一区二区三区久久| 在线免费观看日本欧美| 久久久久久久久久成人| 色妹子一区二区| 91丨九色丨海角社区| 在线亚洲一区观看| 成人黄色免费网| 欧美精品日韩精品| 国产超碰人人模人人爽人人添| 欧美一区二区免费| 亚洲精品无amm毛片| 欧美精品一区二区在线观看| 免费观看黄色av| 日韩精品一区二区三区第95| 免费一级在线观看播放网址| 亚洲欧洲一区二区三区在线观看| 国产系列在线观看| 日韩最新av在线| caoporn97在线视频| 欧美激情a在线| 欧美三级网站| 国产精品激情av电影在线观看 | 在线观看91视频| 中国一级片黄色一级片黄| 欧美日韩性生活| 国产黄色av片| 亚洲精品电影久久久| 免费黄色片在线观看| 中文字幕亚洲一区在线观看| 国产原创在线观看| 孩xxxx性bbbb欧美| 二吊插入一穴一区二区| 成人性生交大片免费看小说| 91蝌蚪精品视频| 欧美一级爽aaaaa大片| 99久久99久久精品国产片桃花 | 精品一区二区三区欧美| 成人免费播放视频| 97国产一区二区| 青青草自拍偷拍| 亚洲一区在线观看网站| www.国产毛片| 日韩三级在线观看| 国内精品一区视频| 欧美激情精品久久久久久| 日韩久久久久久| 一本大道熟女人妻中文字幕在线 | 不卡视频免费在线观看| 日韩精品一区二区视频| 无遮挡的视频在线观看| 欧美精品videosex性欧美| 天天综合网站| 高清一区二区三区视频| 久久不见久久见免费视频7| 神马午夜伦理影院| 天堂影院一区二区| 性生交大片免费看l| 国产欧美日韩卡一| 久久黄色小视频| 欧美视频中文字幕| 色欲av永久无码精品无码蜜桃| 最近2019中文免费高清视频观看www99 | 成人精品毛片| 五月天综合网| 亚洲女同在线| gogo亚洲国模私拍人体| 国产日产精品1区| 国产在线视频在线观看| 欧美日韩久久一区| 日本不卡视频一区二区| 久久久久久久激情视频| 91丨精品丨国产| 日本午夜精品电影| 亚洲一区欧美激情| 无码人妻一区二区三区免费n鬼沢| 日本一区二区三区免费乱视频| 伊人久久综合视频| 欧美xxxx在线观看| 国产黄大片在线观看画质优化| 国产精品91在线观看| 九九热hot精品视频在线播放| 91九色国产ts另类人妖| 免费成人av在线播放| 国产美女免费网站| 精品成人国产在线观看男人呻吟| www.香蕉视频| 欧美成人亚洲成人| 国产一区二区高清在线| 伊人久久大香线蕉av一区| 日本aⅴ免费视频一区二区三区| 日本xxx在线播放| 精品久久久久久中文字幕| 日韩在线视频观看免费| 欧美福利视频在线| 狂野欧美xxxx韩国少妇| 国产又粗又爽又黄的视频| 久久99精品久久久久| 日韩免费av一区| 欧美日韩精品一区视频| 九义人在线观看完整免费版电视剧| 国产精品免费久久久久久| 郴州新闻综合频道在线直播| av网站在线不卡| 国产精品天天摸av网| 国产精品高潮呻吟久久久| 久久成人这里只有精品| 一区二区精彩视频| 国产曰肥老太婆无遮挡| 成人不卡免费av| 国产又黄又猛又粗又爽| 亚洲人成在线一二| 成人国产精品一区二区免费麻豆| 伊人久久大香线蕉精品 | av网站有哪些| 欧美午夜宅男影院在线观看| 黄色小视频在线观看| 国产精品日韩欧美综合| 亚洲国产一成人久久精品| 亚洲911精品成人18网站| 亚洲国产视频直播| 手机在线观看毛片| 国产精品igao视频| 99国内精品久久久久久久| 国产在线视频三区| 婷婷开心久久网| 国产二区视频在线观看| 成人深夜直播免费观看| 亚洲一级一区| 欧美 日韩 成人| 911精品国产一区二区在线| 欧美78videosex性欧美| 欧美日韩亚洲一区二区三区四区| 免费人成精品欧美精品 | 欧美视频免费在线观看| 成人高清免费观看mv| 91久久极品少妇xxxxⅹ软件| 中文高清一区| 国产成人在线网址| 精品国精品国产| 99久久久国产精品免费调教网站| 天天在线免费视频| 91在线视频官网| 国产精品久久久久毛片| 57pao国产成人免费| 久久精品欧美一区| 色天使在线视频| 91精品国产入口| 芒果视频成人app| 老司机午夜网站| 国产日韩欧美精品综合| 亚洲不卡免费视频| 国产精品日韩在线观看| 一区二区毛片| 男人操女人的视频网站| 亚洲欧美国产精品久久久久久久| 免费看日产一区二区三区| 日韩在线第三页| 亚洲成人精品一区|