原文: http://zetcode.com/gui/tcltktutorial/drawing/

在 Tcl/Tk 教程的这一部分中,我们将做一些绘图。 在canvas小部件上完成 Tk 的绘制。 画布是 Tk 中图形的高级工具。

它可以用于创建图表,自定义窗口小部件或创建游戏。

色彩

颜色是代表红色,绿色和蓝色(RGB)强度值的组合的对象。

  1. #!/usr/bin/wish
  2. # ZetCode Tcl Tk tutorial
  3. #
  4. # This program draws three
  5. # rectangles filled with different
  6. # colours.
  7. #
  8. # author: Jan Bodnar
  9. # last modified: March 2011
  10. # website: www.zetcode.com
  11. canvas .can
  12. .can create rect 30 10 120 80 \
  13. -outline #fb0 -fill #fb0
  14. .can create rect 150 10 240 80 \
  15. -outline #f50 -fill #f50
  16. .can create rect 270 10 370 80 \
  17. -outline #05f -fill #05f
  18. pack .can
  19. wm title . "Colours"
  20. wm geometry . 400x100+300+300

在代码示例中,我们绘制了三个矩形,并用不同的颜色值填充了它们。

  1. canvas .can

我们创建canvas小部件。

  1. .can create rect 30 10 120 80 \
  2. -outline #fb0 -fill #fb0

使用create命令,我们在画布上创建一个新的矩形项目。 前四个参数是两个边界点的 x,y 坐标:左上角和右下角。 使用-outline选项,我们可以控制矩形轮廓的颜色。 同样,-fill选项为矩形的内部提供颜色。

Tcl/Tk 绘图 - 图1

图:颜色

形状

我们可以在画布上绘制各种形状。 以下代码示例将显示其中的一些。

  1. #!/usr/bin/wish
  2. # ZetCode Tcl/Tk tutorial
  3. #
  4. # In this script, we draw basic
  5. # shapes on the canvas.
  6. #
  7. # author: Jan Bodnar
  8. # last modified: March 2011
  9. # website: www.zetcode.com
  10. canvas .can
  11. .can create oval 10 10 80 80 -outline #777 \
  12. -fill #777
  13. .can create oval 110 10 210 80 -outline #777 \
  14. -fill #777
  15. .can create rect 230 10 290 60 -outline #777 \
  16. -fill #777
  17. .can create arc 30 200 90 100 -start 0 -extent 210 \
  18. -outline #777 -fill #777
  19. set points [ list 150 100 200 120 240 180 210 \
  20. 200 150 150 100 200 ]
  21. .can create polygon $points -outline #777 \
  22. -fill #777
  23. pack .can
  24. wm title . "shapes"
  25. wm geometry . 330x220+300+300

我们在窗口上绘制五个不同的形状:一个圆形,一个椭圆形,一个矩形,一个弧形和一个多边形。 轮廓和内部以相同的灰色绘制。

  1. .can create oval 10 10 80 80 -outline #777 \
  2. -fill #777

create oval创建一个圆。 前四个参数是圆的边界框坐标。 换句话说,它们是在其中绘制圆的框的左上和右下点的 x,y 坐标。

  1. .can create rect 230 10 290 60 -outline #777 \
  2. -fill #777

我们创建一个矩形项目。 坐标还是要绘制的矩形的边界框。

  1. .can create arc 30 200 90 100 -start 0 -extent 210 \
  2. -outline #777 -fill #777

该代码行创建了一条弧。 圆弧是圆的圆周的一部分。 我们提供边界框。 -start选项是圆弧的起始角度。 -extent是角度大小。

  1. set points [ list 150 100 200 120 240 180 210 \
  2. 200 150 150 100 200 ]
  3. .can create polygon $points -outline #777 \
  4. -fill #777

创建一个多边形。 它是具有多个角的形状。 要在 Tk 中创建多边形,我们向create polygon命令提供了多边形坐标列表。

Tcl/Tk 绘图 - 图2

图:形状

绘制图像

在以下示例中,我们将在画布上创建一个图像项。

  1. #!/usr/bin/wish
  2. # ZetCode Tcl/Tk tutorial
  3. #
  4. # This program draws an image
  5. # on the canvas widget.
  6. #
  7. # author: Jan Bodnar
  8. # last modified: March 2011
  9. # website: www.zetcode.com
  10. package require Img
  11. image create photo img -file "tatras.jpg"
  12. set height [image height img]
  13. set width [image width img]
  14. canvas .can -height $height -width $width
  15. .can create image 0 0 -anchor nw -image img
  16. pack .can
  17. wm title . "High Tatras"
  18. wm geometry . +300+300

我们在画布上显示图像。

  1. image create photo img -file "tatras.jpg"

我们从位于当前工作目录中的 JPG 图像创建照片图像。

  1. set height [image height img]
  2. set width [image width img]

我们得到图像的高度和宽度。

  1. canvas .can -height $height -width $width

我们创建canvas小部件。 它考虑了图像的大小。

  1. .can create image 0 0 -anchor nw -image img

我们使用create image命令在画布上创建一个图像项。 为了显示整个图像,它固定在北部和西部。 -image选项提供要显示的照片图像。

绘制文字

在最后一个示例中,我们将在窗口上绘制文本。

  1. #!/usr/bin/wish
  2. # ZetCode Tcl/Tk tutorial
  3. #
  4. # In this script, we draw text
  5. # on the window.
  6. #
  7. # author: Jan Bodnar
  8. # last modified: March 2011
  9. # website: www.zetcode.com
  10. canvas .can
  11. .can create text 10 30 -anchor w -font Purisa \
  12. -text "Most relationships seem so transitory"
  13. .can create text 10 60 -anchor w -font Purisa \
  14. -text "They're good but not the permanent one"
  15. .can create text 10 110 -anchor w -font Purisa \
  16. -text "Who doesn't long for someone to hold"
  17. .can create text 10 140 -anchor w -font Purisa \
  18. -text "Who knows how to love without being told"
  19. .can create text 10 170 -anchor w -font Purisa \
  20. -text "Somebody tell me why I'm on my own"
  21. .can create text 10 200 -anchor w -font Purisa \
  22. -text "If there's a soulmate for everyone"
  23. pack .can
  24. wm title . "lyrics"
  25. wm geometry . 430x250+300+300

我们在窗口上画一首歌的歌词。

  1. .can create text 10 30 -anchor w -font Purisa \
  2. -text "Most relationships seem so transitory"

前两个参数是文本中心点的 x,y 坐标。 如果我们将文本项锚定在西方,则文本将从该位置开始。 -font选项提供文本的字体,而-text 选项是要显示的文本。

Tcl/Tk 绘图 - 图3

图:绘制文本

在 Tcl/Tk 教程的这一部分中,我们做了一些绘图。