【问题标题】:Is there a way of drawing non-canvas lines in Tkinter?有没有办法在 Tkinter 中绘制非画布线?
【发布时间】:2016-08-11 13:58:33
【问题描述】:

嗨!

我一直在 StackExchange 和其他一些论坛上寻找我的问题的答案,但我找不到任何相关的东西,所以我在这里发布我的问题。

我要做的是绘制与其他 Tkinter 小部件在同一层上的线条。我目前正在编写一个界面,其中某些小部件需要在视觉上相互连接(NodeBox 样式或 Quartz Composer 样式)。
Shows the connectors (noodles) present in Quartz Composer. (I'm not necessarily looking for curved lines, straight is more than enough.)

问题是使用画布小部件太复杂了(我将使用很多小部件,因此我认为将它们全部嵌入画布并不是一个真正的选择)。我正在寻找类似于分隔小部件但允许对角线并由坐标定义的东西。我正在考虑创建一个自定义小部件来执行此操作,但我不确定从哪里开始。另一种解决方案可能是在非画布小部件上放置一个透明画布,但这会使鼠标单击事件复杂化很多。我不知道哪个选项是最好的。

关于如何从画布小部件中完成画线有什么想法吗? (或者关于我如何创建一个自定义小部件来做到这一点?)

【问题讨论】:

  • “太复杂”是什么意思?有多复杂?
  • @BryanOakley 问题是我想制作这些包含文本、“输入”和“输出”的可拖动“组件”,并将它们放入我需要 pack()grid() 的内部。我不能使用pack()grid() 几何管理器,这意味着我必须自己编写类似的管理器。我认为这会很复杂......实现一种我可以place() 的线条小部件似乎要简单得多。
  • 如果你想拖动东西,画布可以让你完全控制它。在网格中布置东西只是一个小数学。老实说,您可以在画布内使用packgrid,但是您将失去拖动东西的能力,并且失去滚动的能力。滚动可以解决,但是需要用packgrid拖拽会比较麻​​烦。
  • @BryanOakley 真的吗?我不认为这些方法在画布中可用。如果我制作一个可拖动的画布窗口并在其中使用grid 会怎样?那可能吗 ?顺便说一句,非常感谢您的有用回复!
  • 您可以在画布内的小部件上使用网格,但它们将无法拖动。可拖动(对我而言)意味着您可以将其拖动到任何地方。 grid 旨在决定将小部件放置在行和列中。如果你想拖动它,为什么要使用网格?

标签: python canvas tkinter tkinter-canvas custom-widgets


【解决方案1】:

画线的唯一合理选择是画布。如果没有画布,您可以使用分隔符和place 模拟水平线或垂直线,但不能做对角线。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多