2015-09-14 2 views
0

Я делаю эту небольшую программу, где пользователь может вводить оси x и y на экране, куда они хотят переместить мышь, и сколько времени они хотели бы нажимать на этот пиксель ,Python - аргументы функции не работают

Моя проблема, когда я пытаюсь поместить переменные в эту функцию, аргументы, по-видимому, не могут быть преобразованы? В SetCurPos() проблема, она будет принимать SetCurPos (х, у), но я получаю сообщение об ошибке:

 

    File "C:\Python27\Scripts\ManipulationTools.py", line 13, in click 
     SetCursorPos(x,y) 
    ArgumentError: argument 1: : Don't know how to convert parameter 1 

Мой код:

 

    from Tkinter import * 
    import time 
    import ctypes 
    #from MoveCursor import click 

    class ManipulationTools(): 

    ##############FUNCTIONS################################### 
     def click(x,y, numclicks): 
      SetCursorPos = ctypes.windll.user32.SetCursorPos 
      mouse_event = ctypes.windll.user32.mouse_event 

      SetCursorPos(x,y) 
      E1.DELETE(0, END) 
      E2.DELETE(0, END) 
      E3.DELETE(0, END) 

      for i in xrange(numclicks): 
       mouse_event(2,0,0,0,0) 
       mouse_event(4,0,0,0,0) 



    #############END FUNCTIONS################################ 
     root = Tk() 

     root.maxsize(width=400, height=400) 
     root.minsize(width=400, height=400) 

     root.config(bg="black") 

     L1 = Label(root,text="Enter the x and y value here:", fg="white", bg="black") 
     L1.place(x=20, y=20) 
     Lx = Label(root, text="X:",fg="white",bg="black") 
     Lx.place(x=170,y=20) 
     Ly = Label(root, text="Y:",fg="white",bg="black") 
     Ly.place(x=240,y=20) 
     Lnum = Label(root, text="Number of Times:",fg="white",bg="black") 
     Lnum.place(x=150, y=100) 

     E1 = Entry(root, width=5, bg="grey",) 
     E1.place(x=190,y=20) 
     E2 = Entry(root, width=5, bg="grey",) 
     E2.place(x=260,y=20) 
     E3 = Entry(root, width=5, bg="grey",) 
     E3.place(x=260,y=100) 

     a=IntVar(E1.get()) 
     b=IntVar(E2.get()) 
     c=IntVar(E3.get()) 


     con = Button(root, command=click(a,b,c), text="Confirm", bg="white") 
     con.place(x=300,y=300) 

     root.mainloop() 

Моя ошибка Traceback, когда я нажимаю кнопка для подтверждения номера в полях вошли:

 

    Traceback (most recent call last): 
     File "C:\Python27\Scripts\ManipulationTools.py", line 6, in 
     class ManipulationTools(): 
     File "C:\Python27\Scripts\ManipulationTools.py", line 53, in ManipulationTools 
     con = Button(root, command=click(a,b,c), text="Confirm", bg="white") 
     File "C:\Python27\Scripts\ManipulationTools.py", line 13, in click 
     SetCursorPos(x,y) 
    ArgumentError: argument 1: : Don't know how to convert parameter 1 

ответ

1

Что вы называете ####functions#### фактически методы, и, следовательно, первый аргумент, который они получают, всегда является ссылкой на экземпляр их содержащего класса, который обычно называется self. Вы можете, однако, имя, параметр, как вы хотите, что то, что произошло здесь:

class ManipulationTools(): 
    def click(x,y, numclicks): 

x что в другом месте будет называться self, не первый аргумент, что вы даете, когда делаете что-то вроде

tools = ManipulationTools() 
tools.click(100,200,1) ## this should actually give you an error -- ManipulationTools.click gets called with 4 arguments (self, 100, 200, 1), but is only defined for 3 (self, y, numclicks) 

правильным сделать это:

class ManipulationTools(): 
    def click(self, x,y, numclicks): 
+0

вы не можете использовать лямбда – Hippolippo

+0

не совсем уверен, что вы имеете в виду. Итак, я скажу: нет. –

Смежные вопросы