3 回答

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
看來問題是標(biāo)簽沒有被破壞并且與新創(chuàng)建的超鏈接重疊。我無法找到上述問題的解決方案,但提出了替代解決方案,因?yàn)閒yne API 處于開發(fā)階段,許多內(nèi)部功能無法訪問并且可能會(huì)更改解決方案可能會(huì)隨著時(shí)間的推移而更改并變得簡(jiǎn)單化。
package main
import (
"image/color"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget"
"fyne.io/fyne/v2/canvas"
)
const HEIGHT float32 = 30
func setDefaultColumnsWidth(table *widget.Table) {
colWidths := []float32{130, 150, 160, 200, 400, 150, 250, 110, 80}
for idx, colWidth := range colWidths {
table.SetColumnWidth(idx, colWidth)
}
}
func main() {
application := app.New()
win := application.NewWindow("Test GUI")
data := [][]fyne.CanvasObject{
{widget.NewLabel("ffffffffffffff"), widget.NewHyperlink("TUTU", nil), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff")},
{widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewHyperlink("ffffffffffffff", nil)},
{widget.NewHyperlink("TUTU", nil), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff"), widget.NewLabel("ffffffffffffff")},
}
tableData := widget.NewTable(
func() (int, int) {
return len(data), len(data[0])
},
func() fyne.CanvasObject {
c := fyne.NewContainerWithoutLayout()
r := canvas.NewRectangle(color.White)
r.SetMinSize(fyne.NewSize(0, HEIGHT))
r.Resize(fyne.NewSize(0, HEIGHT))
c.AddObject(r)
return c
},
func(cell widget.TableCellID, o fyne.CanvasObject) {
container := o.(*fyne.Container)
var obj fyne.CanvasObject = data[cell.Row][cell.Col]
container.AddObject(obj)
container.Refresh()
})
setDefaultColumnsWidth(tableData)
label := widget.NewLabel("My table :")
button := widget.NewButton("Close", func() {
application.Quit()
})
container := layout.NewBorderLayout(label, button, nil, nil)
box := fyne.NewContainerWithLayout(container, label, tableData, button)
win.SetContent(box)
win.Resize(fyne.NewSize(1800, 400))
win.ShowAndRun()
}

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
我聯(lián)系了 Fyne Slack 小組,推薦的解決方案是將兩個(gè)元素封裝在一個(gè)容器中,并在更新回調(diào)函數(shù)中僅顯示所需的元素
創(chuàng)建單元回調(diào)函數(shù):
func() fyne.CanvasObject {
label := widget.NewLabelWithStyle("", fyne.TextAlignLeading, fyne.TextStyle{})
hyperlink := widget.NewHyperlink("", nil)
hyperlink.Hide()
return container.NewMax(label, hyperlink)
}
更新回調(diào)函數(shù):
func(i widget.TableCellID, o fyne.CanvasObject) {
container := o.(*fyne.Container)
label := container.Objects[0].(*widget.Label)
hyperlink := container.Objects[1].(*widget.Hyperlink)
switch i.Col {
case 0:
case 5:
label.Hide()
hyperlink.Hidden = false
hyperlink.SetText("Hi!")
hyperlink.SetURL(url.Parse("https://stackoverflow.com"))
default:
hyperlink.Hide()
label.Hidden = false
label.SetText("Hello")
}
}

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
關(guān)于如何使用container.NewMax和Table.SetColumnWidth創(chuàng)建更復(fù)雜的表,有更完整的文章。該示例逐步執(zhí)行此表的代碼:
在此處輸入圖像描述
兩個(gè)主要技巧是設(shè)置容器而不是單個(gè)小部件:
container.NewMax(widget.NewLabel("template11"), widget.NewIcon(nil))
然后在回調(diào)中適當(dāng)?shù)仉[藏或顯示項(xiàng)目:
l := o.(*fyne.Container).Objects[0].(*widget.Label)
i := o.(*fyne.Container).Objects[1].(*widget.Icon)
l.Show()
i.Hide()
switch id.Col {
case 2:
l.Hide()
i.Show()
i.SetResource(getIcon(id.Row))
case 0:
l.SetText("hostname")
}
在https://fynelabs.com/2022/12/30/building-complex-tables-with-fyne/閱讀更多內(nèi)容
- 3 回答
- 0 關(guān)注
- 365 瀏覽
添加回答
舉報(bào)