画布的宽度是否有限制

时间:2014-10-26 21:33:11

标签: canvas tcl tk

画布属性“width”的值是否有限制?

在下面的示例中,我在ScrolledWindow中创建了一个Canvas。

# Packages
package require BWidget

# Mainframe
set mfr [MainFrame .mfr -textvariable "Test"]
pack $mfr -fill both -expand yes

# Create a Paned Window with two panes
set pw1 [PanedWindow [$mfr getframe].pw1 -side left]
set pat [$pw1 add -minsize 200]
set pai [$pw1 add -minsize 200]
pack $pw1 -fill both -expand yes -anchor nw

# Create a frame for each pane
set tft [TitleFrame $pat.tft -text "Scrollable Canvas"]
set tfi [TitleFrame $pai.tfi -text "Informations"]
pack $tft -fill both -expand yes -anchor nw
pack $tfi -fill both -expand yes -anchor nw

# Create a canvas inside a ScrolledWindow for the first pane
set swt [ScrolledWindow [$tft getframe].swt -relief sunken -borderwidth 2 -scrollbar horizontal -auto none]
set sft [ScrollableFrame $swt.sft -width 50000 -height 200]
$swt setwidget $sft
set tab [canvas [$sft getframe].tab -width 50000 -height 200 -background black]
# Draw an horizontal line on the canvas
$tab create line 0 100 50000 100 -width 1 -fill white

pack $tab -fill both -expand yes -anchor nw
pack $swt -fill both -expand yes -anchor nw

# Create a ScrolledWindow for the second pane
set swl [ScrolledWindow [$tfi getframe].swl -relief sunken -borderwidth 2 -scrollbar vertical -auto both]
pack $swl -expand yes -fill both

# Display the window manager
wm minsize . 600 350
wm deiconify .
wm protocol . WM_DELETE_WINDOW {exit}
bind . <Control-q> {exit}

在这个例子中,我为画布使用了“50 000”的宽度,但是当我使用滚动条时,画布的黑框在此之前结束。同样的问题也会影响画布上绘制的水平线。

我错过了什么吗?   画布的“width”属性是否有已知限制?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

如果你使它们大于32,000(严格来说是32767,一个有符号的C short的限制),特别是在渲染层(并且肯定 don&#39;使画布视口大小!)。但是,底层画布模型使用IEEE double来存储坐标,所以没有理由不能让事情远远不够。你必须保持单个物体的大小。

这是X11的遗产,它在相当多的关键结构中使用16位值作为坐标和尺寸。改变这一点在逻辑上很容易,并且在实践中有很多工作(这些假设都在各地)。