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 关注
- 110 浏览
添加回答
举报