Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Canvas控件方法的补充 #16

Open
52LY opened this issue Mar 14, 2021 · 1 comment
Open

Canvas控件方法的补充 #16

52LY opened this issue Mar 14, 2021 · 1 comment

Comments

@52LY
Copy link

52LY commented Mar 14, 2021

\atk@v1.2.2\tk\canvas.go

func (w *Canvas) PlotLine(xy map[int]int, options map[string]string) error {
    // canvas create line x1 y1... xn yn ?option value ...? // 不闭合折线
    // canvas create line 10 10 200 50 -fill red -width 3 -tags line1
    
    var tmp1 = ""
    for x,y := range xy {
        tmp1 = tmp1 + strconv.Itoa(x) + " " + strconv.Itoa(y) + " "
    }
    var tmp2 = ""
    for k,v := range options {
        tmp2 = tmp2 + "-" +k+ " " + v + " "
    }
    
	return eval(fmt.Sprintf("%v create line %v%v", w.id, tmp1, tmp2))
}

func (w *Canvas) PlotRectangle(x1,y1,x2,y2 int, options map[string]string) error {
    // canvas create rectangle x1 y1 x2 y2 ?option value ...? // 矩形
    // canvas create rectangle 10 10 200 50 -fill red -outline blue -tags rec1

    var tmp2 = ""
    for k,v := range options {
        tmp2 = tmp2 + "-" +k+ " " + v + " "
    }
    
	return eval(fmt.Sprintf("%v create rectangle %v %v %v %v %v", w.id, x1,y1,x2,y2, tmp2))
}


func (w *Canvas) PlotOval(x1,y1,x2,y2 int, options map[string]string) error {
    // canvas create oval x1 y1 x2 y2 ?option value ...?   // 矩形内切椭圆或圆
    // canvas create oval 10 10 200 50 -fill red -outline blue -tags oval1

    var tmp2 = ""
    for k,v := range options {
        tmp2 = tmp2 + "-" +k+ " " + v + " "
    }
    
	return eval(fmt.Sprintf("%v create oval %v %v %v %v %v", w.id, x1,y1,x2,y2, tmp2))
}

func (w *Canvas) PlotPolygon(xy map[int]int, options map[string]string) error {
    // canvas create polygon x1 y1 ... xn yn ?option value ...?  // 多边形
    // canvas create polygon 10 10 180 90 20 45 -fill red -width 3 -tags pol1 
    
    var tmp1 = ""
    for x,y := range xy {
        tmp1 = tmp1 + strconv.Itoa(x) + " " + strconv.Itoa(y) + " "
    }
    var tmp2 = ""
    for k,v := range options {
        tmp2 = tmp2 + "-" +k+ " " + v + " "
    }
    
	return eval(fmt.Sprintf("%v create polygon %v%v", w.id, tmp1, tmp2))
}


func (w *Canvas) PlotText(x1,y1 int, options map[string]string) error {
    // canvas create text x y ?option value ...?  // 文字
    // canvas create text 100 100 -text "A wonderful story" -anchor nw -fill black -tags txt1

    var tmp2 = ""
    for k,v := range options {
        tmp2 = tmp2 + "-" +k+ " " + v + " "
    }
    // v 值含有空格时使用{}, "text":"{A wonderful story}"
    
	return eval(fmt.Sprintf("%v create text %v %v %v", w.id, x1,y1, tmp2))
}

func (w *Canvas) PlotImage(x1,y1 int, options map[string]string) error {
    // canvas create image x y ?option value ...?
    // canvas create image 10 10 -image myimg -anchor nw
    var tmp2 = ""
    for k,v := range options {
        tmp2 = tmp2 + "-" +k+ " " + v + " "
    }
    
	return eval(fmt.Sprintf("%v create image %v %v %v", w.id, x1,y1, tmp2))
}


func (w *Canvas) PlotWidget(x1,y1 int, options map[string]string) error {
    // canvas create window x y ?option value ...?
    // canvas create window 10 10 -anchor nw -window .canvas.b
    var tmp2 = ""
    for k,v := range options {
        tmp2 = tmp2 + "-" +k+ " " + v + " "
    }
    
	return eval(fmt.Sprintf("%v create window %v %v %v", w.id, x1,y1, tmp2))
}

几个例子

    canvas := tk.NewCanvas(mw)
    canvas.SetNativeAttribute("background","red")
    canvas.SetNativeAttribute("width","200")
    canvas.SetNativeAttribute("height","200")
    canvas.SetNativeAttribute("height","200")

    // canvas.PlotLine(map[int]int{10:10,50:50}, map[string]string{"fill":"yellow","width":"3","tags":"line1"})

    // canvas.PlotRectangle(15,15,180,90,map[string]string{"fill":"green","outline":"blue","tags":"rec1"})

    canvas.PlotOval(15,15,180,90,map[string]string{"fill":"green","outline":"blue","tags":"oval1"})

    canvas.PlotPolygon(map[int]int{10:10,180:90,25:45}, map[string]string{"fill":"yellow","width":"3","tags":"pol"})

    canvas.PlotText(100,100, map[string]string{"fill":"black","text":"{A wonderful story}","anchor":"nw","tags":"txt1"})
    
    img, _ := tk.LoadImage("./btn02.png")
    
    canvas.PlotImage(70,100, map[string]string{"image":img.Id(),"anchor":"nw","tags":"img1"})
    
    canavsbtn := tk.NewButton(canvas,"canvasbtn",tk.WidgetAttrInitUseTheme(false))

    canvas.PlotWidget(50,50, map[string]string{"window":canavsbtn.Id(),"anchor":"nw","tags":"widget1"})

参考:
http://www.tcl-lang.org/man/tcl8.6/TkCmd/canvas.htm
https://tkdocs.com/tutorial/canvas.html

@visualfc
Copy link
Owner

可以直接提交 PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants