【问题标题】:Tkinter - Canvas scrolling explained - restricted area - fixed viewTkinter - 画布滚动解释 - 限制区域 - 固定视图
【发布时间】:2022-12-05 10:58:05
【问题描述】:

它被带到my attention,你不能限制视图,例如scrollregion = (0,0,0,0) 问题是为什么会这样?由于官方文档表明这应该有效并且不会抛出 badRegion 错误。

scrollregion:

指定一个包含四个坐标的列表,分别描述左侧、顶部、 矩形区域的右侧和底部坐标。这个区域是 用于滚动目的,被认为是边界 画布中的信息。每个坐标可能是 在下面的坐标部分给出的任何形式中指定。

scan dragto:

此命令计算其 x 和 y 参数之间的差异 (通常是鼠标坐标)和 x 和 y 参数 小部件的最后一个扫描标记命令。然后它通过以下方式调整视图 增益乘以坐标差,其中增益默认为 10。 此命令通常与鼠标移动事件相关联 widget,产生高速拖动画布的效果 通过它的窗口。返回值是一个空字符串。

【问题讨论】:

    标签: python tkinter canvas scroll tk-toolkit


    【解决方案1】:

    长话短说:确保滚动区域大于画布,否则你的画布将重新居中。见comment in the source code

    需要下面的调用才能使画布重新居中 它是受限的,它的滚动区域比窗口小。


    误解是基于错误的假设,即视图可能小于画布本身,而这并没有在文档中直接指出,您将 find a hint in the C-implementation 画布。从CANV_SCAN 调用的CavnasSetOringin 的备注:

    如有必要,调整原点以尽可能保持 视图中的画布。变量 left、right 等跟踪如何 很多在它粘住之前,视图的每一侧都有额外的空间 超出滚动区域。如果一侧伸出边缘 滚动区域,调整视图使那一侧回到边缘 scrollregion(但不要移动太多以至于另一边粘住 现在出来)。

    所以the basic idea 的可滚动区域和隐式条件是滚动区域大于可见区域,应该如下所示:

    sx1           vx1    ix1    ix2    vx2            sx2
    |             |      |      |      |              | 
    +-------------------------------------------------+
    |                                                 |
    |             +--------------------+              |
    |             |                    |              |
    |             |      +------+      |              |
    |             |      | item |      |              |
    |             |      +------+      |              |
    |             |                    |              |
    |             |    visible area    |              |
    |             +--------------------+              |
    |                                                 |
    |                  scroll region                  |
    +-------------------------------------------------+
    

    然而,核心开发人员决定,无论出于何种原因,当 scrollregion 小于可见区域时它是一个有效区域。我想将 scrollregion 绑定到 '<Configure>' 命令会很方便,而不会出现错误。您还应该知道,所有这些仅适用于 confine=True 的画布:

    指定一个布尔值,指示它是否应该 允许将画布的视图设置在由 滚动区域参数。默认为 true,这意味着视图 将被限制在滚动区域内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 2018-06-28
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      相关资源
      最近更新 更多