visualfc/atk

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

52LY opened this issue · 0 comments

52LY commented

子窗口加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)
}