【问题标题】:In tkinter is there a way to draw a smoothed out curved line?在 tkinter 中有没有办法绘制平滑的曲线?
【发布时间】:2020-07-22 14:50:28
【问题描述】:

以下提供的行来自the tkdocs website

一个订单项实际上可以是一系列线段,而不仅仅是一个;在 在我们的示例中,我们可以选择为每个 完成行程。也可以直接点对点画线, 或平滑成曲线。

文档最后指出“一条线(在 tkinter 画布上)可以直接点对点绘制,或者平滑成一条曲线。”。但我还没有找到一种方法来做到这一点。


编辑:

我的项目中使用的完整代码太大且不相关,无法提供,但下面给出的是其中的一小部分,它与上述问题有关。希望下面的代码可以帮助描述我迄今为止尝试过的内容。

def clear_prev_draw_coords(event = None) :
    global last_draw_x, last_draw_y, pen_color, pen_size

    last_draw_x, last_draw_y = None, None
    drawing_coord_list.clear()
    return

def draw() :
    last_img_x = 0
    last_img_y = 0
    canvas.create_line(last_draw_x, last_draw_y, x2, y2, fill = pen_color, width = pen_size, tag = tag, smooth = 1)

    last_draw_x, last_draw_y = x2, y2
    return

def toggle_pen_mode(dummy = None) :
    global mode

    mode = 'pen'

    root.bind("<B1-Motion>", draw)
    root.bind("<ButtonRelease-1>", clear_prev_draw_coords)
    return

【问题讨论】:

  • 请发布您目前使用的代码,以便人们尝试帮助您。
  • Canvas.create_line() 函数中有一个smooth 选项。
  • @Ronald 我现在已经发布了代码,希望对您有所帮助:)
  • @acw1668 是的,我试过了,但它并没有像我想要的那样画出曲线。
  • 您需要为一个create_line() 提供两个以上的点才能创建平滑线。

标签: python tkinter canvas line


【解决方案1】:

你读过effbot吗?您可以找到很多关于所有可能的标志和选项的信息。这个迷你示例使用smooth-flag 创建一条曲线:

from tkinter import *

master = Tk()

w = Canvas(master, width=200, height=100)
w.pack()

w.create_line(150,0, 100,50, 50,0, 0,50, smooth=1)

mainloop()

【讨论】:

  • 我已经试过了,但这并不能形成平滑的曲线。
  • 这很奇怪。您是否尝试了确切的示例,或者您是否以某种修改的方式使用它?对于曲线,您至少需要三个 (x,y) 坐标。
  • 您可能需要考虑添加屏幕截图以显示代码生成的内容。
  • 我已经尝试过平滑 = 1,其次是 x1、y1、x2、y2 ......等等我在 effbot 中看到的线接头的东西docs,但我看不到在我的绘图程序中实现它的方法。
  • 哦,我明白了,它可以工作,但是第三点我可以从绘图应用程序中获取它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2012-01-31
  • 2013-01-20
  • 2011-10-26
  • 2022-07-07
  • 2012-06-09
相关资源
最近更新 更多