首页 文章

我需要在触摸屏上设置用户签名

提问于
浏览
2

我正在制作一个POS系统,我想在购买后加入签名选项 . 我已经尝试了一个带有画布的Tkinter方法,但是它很慢,而且它是非常四四方方的任何建议?

这是我现在正在使用的代码:

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( "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()

顺便说一句,这段代码不是我的,我是从this网站获得的

2 回答

  • 2

    这是一个简单的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()
    
  • 3

    一个干净的例子:

    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()
    

    请注意,这会在事件的位置绘制一个椭圆形,并在最后一个事件中添加一条线,这有助于平滑线 .

相关问题