【问题标题】:How can I draw a point with Canvas in Tkinter?如何在 Tkinter 中使用 Canvas 绘制一个点?
【发布时间】:2017-02-14 18:16:06
【问题描述】:

我想在Tkinter中画一个点,现在我用Canvas来做,但是我在Canvas类中没有找到这样的方法来画一个点。Canvas提供了一个叫做@的方法987654324@,所以我尝试设置x1=x2,y1=y2来画一个点,但它不起作用。

所以任何人都可以告诉我如何制作它,如果使用Canvas可以制作它会更好,其他解决方案也可以接受。谢谢!

【问题讨论】:

    标签: python canvas tkinter


    【解决方案1】:

    自从更新 Tk 库(介于 Tk 8.6.0 和 8.6.9 之间)后,create_line 的行为发生了变化。 要在 8.6.0 中在 (x, y) 处创建一个像素点,请添加到 write

    canvas.create_line(x, y, x+1, y, fill=color)
    

    现在在 8.6.9 上你必须使用:

    canvas.create_line(x, y, x, y, fill=color)
    

    请注意,Debian 9 使用 8.6.0,而 Archlinux(在 2019 年初)使用 8.6.9,因此几年后可移植性会受到影响。

    【讨论】:

      【解决方案2】:

      使用 create_line 您还有其他可能的解决方法:

      canvas.create_line(x, y, x+1, y, fill="#ff0000")
      

      它只覆盖一个像素(x,y 到红色)

      【讨论】:

        【解决方案3】:

        当我尝试在一行中放置几个​​像素的序列时,上面提供的解决方案似乎对我不起作用。

        我找到了另一种解决方案——将椭圆的边框宽度减小到 0:

        canvas.create_oval(x, y, x, y, width = 0, fill = 'white')

        【讨论】:

          【解决方案4】:

          没有办法直接在Canvas 上打一个点。下面的方法显示使用create_oval方法的点。

          试试这个:

          from Tkinter import *
          
          canvas_width = 500
          canvas_height = 150
          
          
          def paint(event):
              python_green = "#476042"
              x1, y1 = (event.x - 1), (event.y - 1)
              x2, y2 = (event.x + 1), (event.y + 1)
              w.create_oval(x1, y1, x2, y2, fill=python_green)
          
          
          
          master = Tk()
          master.title("Points")
          w = Canvas(master,
                     width=canvas_width,
                     height=canvas_height)
          w.pack(expand=YES, fill=BOTH)
          w.bind("<B1-Motion>", paint)
          
          message = Label(master, text="Press and Drag the mouse to draw")
          message.pack(side=BOTTOM)
          
          mainloop()
          

          【讨论】:

          • 谢谢!它运作良好,虽然不像我想的那样直接,我想知道为什么create_line不能和create_oval可以。
          • create_line 可以做到这一点,但你必须给线一些尺寸。如果 x1 == x2 和 y1 == y2 那么你有一条零像素线。所以设置 x2 = x1+1 和 y2 = y1+1 并得到一个点。
          • 对不起,这是一幅糟糕的图画,即使是一个例子,除了几乎没有主题之外。提问者问如何 daw 一个点。你只需要指出canvas.create_oval(x, y, x+1, y+1, fill={color})
          • @Apostolos 确实,题外话。也可以通过 self.canvas.create_line(x,y,x,y,width=5, fill='red', capstyle=ROUND, smooth=TRUE, splinesteps=1)
          猜你喜欢
          • 2014-09-25
          • 2021-12-05
          • 1970-01-01
          • 2019-12-21
          • 1970-01-01
          • 2018-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多