visualfc / atk

Another Golang Tcl/Tk binding GUI ToolKit
GNU Lesser General Public License v2.1
97 stars 19 forks source link

如何创建一个顶级子窗口像 NewToplevel 这样 #15

Closed 52LY closed 3 years ago

52LY commented 3 years ago

子窗口加ShowNormal()就成功了,昨天折腾大半天

package main

import "github.com/visualfc/atk/tk"
import "fmt"

type Window struct { *tk.Window }

func NewSubWin()  *Window {
    mw := &Window{}
    mw.Window = tk.NewWindow()

    lbl1 := tk.NewLabel(mw, "Hello ATK 01")
    btn := tk.NewButton(mw,"Destroy",tk.WidgetAttrWidth(20))
    btn.SetTakeFocus(false)
    btn.OnCommand(func() { mw.Destroy() })

    vbox := tk.NewHPackLayout(mw)
    vbox.AddWidget(lbl1,tk.PackAttrPadx(5),tk.PackAttrPady(5),tk.PackAttrAnchor(6))
    vbox.AddWidget(btn,tk.PackAttrPadx(5),tk.PackAttrPady(5),tk.PackAttrAnchor(6))
    return mw
}

func NewWindow() *Window {
    mw := &Window{}
    mw.Window = tk.RootWindow()

    lbl1 := tk.NewLabel(mw, "Hello ATK 01")

    btn := tk.NewButton(mw,"Quit",tk.WidgetAttrWidth(20))

    btn.SetNativeAttribute("cursor","hand1")
    btn.SetNativeAttributes(tk.NativeAttr{"width","42"},tk.NativeAttr{"underline","1"})
    fmt.Println(btn.NativeAttributes("cursor","width","underline"))

    btn.SetTakeFocus(false)

    btn.OnCommand(func() { tk.Quit() })
    btn2 := tk.NewButton(mw,"关于子窗口",tk.WidgetAttrWidth(20))
    btn2.SetTakeFocus(false)

    subwin := func() {
        sw := NewSubWin()
        sw.SetTitle("ATK Subwin Sample")
        sw.ResizeN(600, 600)
        sw.Center(nil)
        sw.ShowNormal()
    }

    btn2.OnCommand(func() { tk.MainLoop(subwin) })

    hbox := tk.NewVPackLayout(mw)
    hbox.SetPaddingN(5, 5)
    hbox.AddWidgetEx(lbl1, 0, false, 6)
    hbox.AddWidgetEx(btn, 0, false, 6)
    hbox.AddWidgetEx(btn2, 0, false, 6)

    vbox := tk.NewHPackLayout(mw)

    vbox.AddWidgetEx(hbox, 0, false, 6)
    lbl3 := tk.NewLabel(mw, "Hello ATK 02")
    vbox.AddWidget(lbl3,tk.PackAttrPadx(5),tk.PackAttrPady(5),tk.PackAttrAnchor(6))
    return mw
}

func main() {
    win := func() {
        mw := NewWindow()
        mw.SetTitle("ATK Sample")
        mw.ResizeN(600, 600)
        mw.Center(nil)
        mw.ShowNormal()
    }

    tk.MainLoop(win)
}