亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從一組代碼同時打開 2 個相同的窗口

從一組代碼同時打開 2 個相同的窗口

Go
拉丁的傳說 2023-07-10 17:39:12
我使用以下代碼創建并顯示一個窗口,其中包含 GUI 組件作為標簽、條目和按鈕:// modified from: https://github.com/andlabs/ui/wiki/Getting-Startedpackage mainimport ("github.com/andlabs/ui")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()}func main() {    ui.Main(makewinfn)    // HOW TO CREATE AND SHOW ANOTHER SUCH WINDOW HERE ?    // ui.Main(makewinfn) // this opens window only after first is closed.}它工作得很好,但是正如我在標題中提到的以及上面代碼中的注釋,如何從 main 函數同時打開兩個這樣的窗口?在主函數中重復會ui.Main(makewinfn)導致僅在第一個窗口關閉后才打開第二個窗口。感謝您的幫助。
查看完整描述

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")

}


查看完整回答
反對 回復 2023-07-10
?
慕村9548890

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()

}


查看完整回答
反對 回復 2023-07-10
  • 2 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號