非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Go言語/Fyne:テーブル(Table)

   

Go言語用のGUIツールキットFyneのウィンドウトップにExcelのようなテーブル(Table)を設置する方法について解説します。

ベースとなるプログラムは以下の記事のソースコード(BorderLayoutのトップにツールバーを設置したもの)をベースにすることにします。

今回の完成形はこちらです。Excel風とは言い難いですね。ヘッダーはないのと表示だけで編集はできません。csvファイルの表示くらいでしょうか。

 

ソースコードはこちら。「追加」と書かれたコメント以下を追加してもらえればOKです。dataという2次元配列を表示させていることがわかるかと思います。

 

package main

import (
  "fyne.io/fyne/v2"
  "fyne.io/fyne/v2/app"
  "fyne.io/fyne/v2/container"
  "fyne.io/fyne/v2/layout"
  "fyne.io/fyne/v2/theme"
  "fyne.io/fyne/v2/widget"
)

func main() {
  myApp := app.New()
  myWindow := myApp.NewWindow("Border Layout")
  myApp.Settings().SetTheme(theme.LightTheme())
  myWindow.Resize(fyne.NewSize(600, 550))

  toolbar := widget.NewToolbar(
    widget.NewToolbarAction(theme.DocumentCreateIcon(), func() { /* ここにボタン押下後の処理を書く */ }),
    widget.NewToolbarAction(theme.FolderOpenIcon(), func() { /* ここにボタン押下後の処理を書く */ }),
    widget.NewToolbarAction(theme.DocumentSaveIcon(), func() { /* ここにボタン押下後の処理を書く */ }),
    widget.NewToolbarSeparator(), //セパレーター
    widget.NewToolbarAction(theme.ContentCutIcon(), func() { /* ここにボタン押下後の処理を書く */ }),
    widget.NewToolbarAction(theme.ContentCopyIcon(), func() { /* ここにボタン押下後の処理を書く */ }),
    widget.NewToolbarAction(theme.ContentPasteIcon(), func() { /* ここにボタン押下後の処理を書く */ }),
    widget.NewToolbarSpacer(), //スペーサー
    widget.NewToolbarAction(theme.HelpIcon(), func() { /* ここにボタン押下後の処理を書く */ }),
  )

  //追加 2次元配列
  var data = [][]string{
    {"1-1", "1-2", "1-3", "1-4", "1-5"},
    {"2-1", "2-2", "2-3", "2-4", "2-5"},
    {"3-1", "3-2", "3-3", "3-4", "3-5"}}

  //追加 Table生成
  list := widget.NewTable(
    func() (int, int) {
      return 3, 5
    },
    func() fyne.CanvasObject {
      return widget.NewLabel("wide content")
    },
    func(id widget.TableCellID, o fyne.CanvasObject) {
      o.(*widget.Label).SetText(data[id.Row][id.Col])
    })

  content := container.New(layout.NewBorderLayout(toolbar, nil, nil, nil),
    toolbar, list)
  myWindow.SetContent(content)
  myWindow.ShowAndRun()
}
 

 

 

スポンサーリンク

 - Fyne, Go言語