2 回答

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
在 UI 庫(kù)中,通常您構(gòu)建界面所用的組件或小部件都有父級(jí),并且通常單個(gè)組件最多可能有一個(gè)父級(jí)。
因此,如果您想要 2 個(gè)具有相同組件的窗口,您仍然必須在 2 個(gè)實(shí)例中創(chuàng)建這些組件,因?yàn)橐粋€(gè)組件無(wú)法添加到 2 個(gè)不同的父級(jí)(在 2 個(gè)不同的窗口中)。
最簡(jiǎn)單的方法是將組件和窗口創(chuàng)建邏輯移動(dòng)到一個(gè)函數(shù)中,然后從傳遞給的函數(shù)中調(diào)用該函數(shù)兩次ui.Main():
func createWindow() {
var name = ui.NewEntry()
var button = ui.NewButton("Greet")
var greeting = ui.NewLabel("")
box := ui.NewVerticalBox()
box.Append(ui.NewLabel("Enter your name:"), false)
box.Append(name, false)
box.Append(button, false)
box.Append(greeting, false)
mywindow := ui.NewWindow("MyTitle", 200, 100, false)
mywindow.SetChild(box)
button.OnClicked( func (*ui.Button) {greeting.SetText("Hello, " + name.Text() + "!") } )
mywindow.OnClosing( func (*ui.Window) bool { ui.Quit(); return true } )
mywindow.Show()
}
func makewinfn() {
createWindow()
createWindow()
}
當(dāng)然,使用這個(gè)createWindow()函數(shù)不是必需的,您可以有一個(gè)循環(huán)進(jìn)行makewinfn()2 次迭代,每次迭代都可以創(chuàng)建一個(gè)窗口。
上面的示例創(chuàng)建了 2 個(gè)相同的窗口,但它們將是“獨(dú)立的”。如果您在其中一個(gè)窗口中輸入文本并單擊其按鈕,則結(jié)果將僅在其包含/父窗口中看到。這是可能的,因?yàn)槊總€(gè)組件都被創(chuàng)建了兩次。
如果您想自定義窗口,您可以傳遞一個(gè)參數(shù),createWindow()以便可以根據(jù)其值來(lái)自定義/個(gè)性化窗口及其內(nèi)容。例如:
func createWindow(id string) {
var name = ui.NewEntry()
var button = ui.NewButton("Greet " + id)
var greeting = ui.NewLabel("")
box := ui.NewVerticalBox()
box.Append(ui.NewLabel("Enter your name " + id + ":"), false)
box.Append(name, false)
box.Append(button, false)
box.Append(greeting, false)
mywindow := ui.NewWindow("MyTitle " + id, 200, 100, false)
mywindow.SetChild(box)
button.OnClicked( func (*ui.Button) {greeting.SetText("Hello, " + name.Text() + "!") } )
mywindow.OnClosing( func (*ui.Window) bool { ui.Quit(); return true } )
mywindow.Show()
}
func makewinfn() {
createWindow("one")
createWindow("two")
}

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
我不知道 Go,但假設(shè) GUI 的工作方式與我使用過的任何其他語(yǔ)言一樣,在 makewinfn 函數(shù)中,您可以通過再次調(diào)用來(lái)簡(jiǎn)單地創(chuàng)建更多窗口ui.NewWindow()。
func makewinfn() {
var name = ui.NewEntry()
var button = ui.NewButton("Greet")
var greeting = ui.NewLabel("")
box := ui.NewVerticalBox()
box.Append(ui.NewLabel("Enter your name:"), false)
box.Append(name, false)
box.Append(button, false)
box.Append(greeting, false)
mywindow := ui.NewWindow("MyTitle", 200, 100, false)
mywindow.SetChild(box)
button.OnClicked( func (*ui.Button) {greeting.SetText("Hello, " + name.Text() + "!") } )
mywindow.OnClosing( func (*ui.Window) bool { ui.Quit(); return true } )
mywindow.Show()
myOtherWindow := ui.NewWindow("MyOtherTitle", 200, 100, false)
myOtherWindow.Show()
}
- 2 回答
- 0 關(guān)注
- 166 瀏覽
添加回答
舉報(bào)