为了账号安全,请及时绑定邮箱和手机立即绑定

我需要设法在触摸屏上获取用户签名

我需要设法在触摸屏上获取用户签名

犯罪嫌疑人X 2021-09-11 21:04:10
我正在制作一个 POS 系统,我想包括一个购买后签名的选项。我已经尝试过使用画布的 Tkinter 方法,但是速度很慢,而且非常四四方方,有什么建议吗?这是我现在正在使用的代码:from tkinter import *canvas_width = 500canvas_height = 150def 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( "Painting using Ovals" )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()顺便说一句,这个代码不是我的,我是从这个网站上得到的
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

这是一个简单的 tkinter 绘图应用程序。


from tkinter import *



b1 = "up"

xold, yold = None, None

display_width = '500'

display_height = '500'

canvas_width = '500'

canvas_height = '500'

def main():

    root = Tk()

    root.geometry((display_width+"x"+display_height))



    drawing_area = Canvas(root,width=canvas_width,height=canvas_height,bg="white")

    drawing_area.bind("<Motion>", motion)

    drawing_area.bind("<ButtonPress-1>", b1down)

    drawing_area.bind("<ButtonRelease-1>", b1up)

    drawing_area.pack(side=RIGHT)

    root.mainloop()


def b1down(event):

    global b1

    x1, y1 = ( event.x - 4 ), ( event.y - 4 )

    x2, y2 = ( event.x + 4 ), ( event.y + 4 )

    event.widget.create_oval( x1, y1, x2, y2, fill = "black" )

    b1 = "down"           # you only want to draw when the button is down

                          # because "Motion" events happen -all the time-


def b1up(event):

    global b1, xold, yold

    b1 = "up"

    xold = None           # reset the line when you let go of the button

    yold = None


def motion(event):

    if b1 == "down":

        global xold, yold

        x1, y1 = ( event.x - 4 ), ( event.y - 4 )

        x2, y2 = ( event.x + 4 ), ( event.y + 4 )

        event.widget.create_oval( x1, y1, x2, y2, fill = "black" )

        if xold is not None and yold is not None:

            python_green = "#476042"

            x1, y1 = ( event.x - 4 ), ( event.y - 4 )

            x2, y2 = ( event.x + 4 ), ( event.y + 4 )

            event.widget.create_oval( x1, y1, x2, y2, fill = "black" )

            event.widget.create_line(xold,yold,event.x,event.y,smooth=TRUE,width=9)

    # here's where you draw it. smooth. neat.

        xold = event.x

        yold = event.y


if __name__ == "__main__":

    main()



查看完整回答
反对 回复 2021-09-11
?
互换的青春

TA贡献1797条经验 获得超6个赞

一个干净的例子:


import tkinter as tk


class Signature(tk.Canvas):

    def __init__(self, *args, **kwargs):

        self.thickness = kwargs.pop('thickness', 4)

        tk.Canvas.__init__(self, *args, **kwargs)

        self._xold = None

        self._yold = None


        self.bind('<B1-Motion>', self._on_motion)


    def _on_motion(self, event):

        x1, y1 = ( event.x - self.thickness ), ( event.y - self.thickness )

        x2, y2 = ( event.x + self.thickness ), ( event.y + self.thickness )

        event.widget.create_oval( x1, y1, x2, y2, fill='black' )

        if self._xold is not None and self._yold is not None:

            self.create_oval( x1, y1, x2, y2, fill='black' )

            self.create_line(self._xold,self._yold,event.x,event.y,smooth=True,width=self.thickness*2+1)

    # here's where you draw it. smooth. neat.

        self._xold = event.x

        self._yold = event.y


if __name__ == '__main__':

    canvas_width = '500'

    canvas_height = '500'


    root = tk.Tk()

    sig = Signature(root, width=canvas_width,height=canvas_height,bg='white', thickness=1)

    sig.pack()


    root.mainloop()

请注意,这会在事件的位置绘制一个椭圆形,并绘制一条线将其与最后一个事件连接起来,这有助于平滑线。


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信