2 回答

TA貢獻1890條經驗 獲得超9個贊
在 UI 庫中,通常您構建界面所用的組件或小部件都有父級,并且通常單個組件最多可能有一個父級。
因此,如果您想要 2 個具有相同組件的窗口,您仍然必須在 2 個實例中創建這些組件,因為一個組件無法添加到 2 個不同的父級(在 2 個不同的窗口中)。
最簡單的方法是將組件和窗口創建邏輯移動到一個函數中,然后從傳遞給的函數中調用該函數兩次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()
}
當然,使用這個createWindow()函數不是必需的,您可以有一個循環進行makewinfn()2 次迭代,每次迭代都可以創建一個窗口。
上面的示例創建了 2 個相同的窗口,但它們將是“獨立的”。如果您在其中一個窗口中輸入文本并單擊其按鈕,則結果將僅在其包含/父窗口中看到。這是可能的,因為每個組件都被創建了兩次。
如果您想自定義窗口,您可以傳遞一個參數,createWindow()以便可以根據其值來自定義/個性化窗口及其內容。例如:
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貢獻1884條經驗 獲得超4個贊
我不知道 Go,但假設 GUI 的工作方式與我使用過的任何其他語言一樣,在 makewinfn 函數中,您可以通過再次調用來簡單地創建更多窗口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 關注
- 157 瀏覽
添加回答
舉報