首页 > 解决方案 > 如何在 Python 中修复“TypeError:MOVE() 采用 0 个位置参数但给出了 1 个”

问题描述

尝试基于 x 和 y 坐标制作一个简单的绘图程序,我正在使用一个函数在一次调用中绘制和修改坐标,而实际上没有使用全局变量为函数本身赋予 valuea 来满足函数需要修改的内容,但它仍然好像我已经给了它实际的直接输入。

在以前的版本中,我通过使用一个类来记住相应类的坐标和函数来进行绘图,但在这种情况下,输入方法略有不同,因为我使用的是缩放小部件而不是按钮和正如我之前提到的,我确实尝试在两个程序中使用全局变量,但它在它们中的任何一个中都不起作用。

from tkinter import *

win=Tk()
win.title("Etch a Schetch")
win.configure(background="grey")
win.configure(bd=5)

global xa
xa=0
global ya
ya=0

def MOVE():
    tabla.create_line(xa,ya,sx.get(),sy.get())
    xa=sx.get()
    ya=sy.get()


tabla=Canvas(win,width=300,height=300)


sx=Scale(win,from_=0,to=300,length=300,orient="horizontal",command=MOVE)

sy=Scale(win,from_=0,to=300,length=300,command=MOVE)

ex=Button(win,text="Exit",command=exit)


tabla.grid(row=1,column=1)
sx.grid(row=2,column=1)
sy.grid(row=1,column=2)
ex.grid(row=2,column=2)

win.mainloop()

如果它会起作用,它会有点像蚀刻草图。

标签: pythontkinter

解决方案


实际上,我刚刚意识到问题出在哪里,引用首先发表评论的 mkiever,但直到我对“Scale”和正在调用的命令之间的交互进行了一些单独的测试,我才明白。简而言之,“Scale”调用的函数更容易理解,因为它的命令会自动将比例的值作为函数的输入,因此,当我定义时,我只需要在括号中声明一个变量函数,但不需要括号或输入变量来从比例给它输入。

例子:

from tkinter import *
import time

win=Tk()

def P(a):
    print(a)

sx=Scale(win,from_=0,to=300,length=300,orient="horizontal",command=P)
sx.pack()

win.mainloop()

仍然需要对代码进行一些更改,但如果不出现那个讨厌的错误,它会容易得多。

谢谢大家的建议。


推荐阅读