类型错误:Iniciar() 缺少 1 个必需的位置参数:“数据”并且追加失败

时间:2021-05-08 00:11:47

标签: python tkinter

每次单击“agregar”按钮时,我都试图将输入数字附加到我的数组数据中,但是它似乎只附加了我刚刚插入的值,而完全忘记了之前的附加值。我没有收到任何错误消息。此外,当我单击“iniciar”时,它应该使用数据中的值绘制椭圆,但出现错误

<块引用>

TypeError: Iniciar() 缺少 1 个必需的位置参数:'data'

我不确定我做错了什么,如果有人能提供帮助,我将不胜感激。

from tkinter import * 
from tkinter import ttk 
from array import *
import random 

tk = Tk()
tk.title('Bubble Sort')
tk.maxsize(900, 600)
tk.config(bg = 'black')

#Variables
algoritmo = StringVar()

#comandos 

def dibujar(data):
    c.delete("all") 
    cHeight = 380
    cWidth = 600 

    #para escalar 
    algoWidth = cWidth /  (len(data) + 1)
    algoHeight = cWidth /  (len(data) + 1)
    offset = 20
    spacing = 10

    tamData = [i / max(data) for i in data]

    for i, height in enumerate(tamData):
        #top left
        x0 = i * algoWidth + offset + spacing
        y0 = cHeight - height * 50

        #botom right
        x1 = (i+1) * algoWidth + offset
        y1 = cHeight 

        c.create_oval(x0,y0,x1,y1, fill = 'red')
        c.create_text(x0+2,y0, anchor = SW, text=str(data[i]))

def Iniciar(data):
    print("Se selecciono: " + algoritmo.get())
 
    dibujar(a)

def agregar():
    data = array('i', [1, 3, 5, 7, 9])
    input =  int(inputVal.get())
    data.append((input))

    print("valor input:")
    print(input)
    print(str(data))


def limpiar():
    c.delete("all") 
    

#Frame
box = Frame(tk, width = 600, height = 200, bg = 'black' )
box.grid(row = 0, column = 0, padx=10, pady=5)
c = Canvas(tk, width = 600, height = 380,  bg = 'grey')
c.grid(row = 1, column = 0, padx=10, pady=5)

#UI
#Row-0
label = Label(box, text='Lista Algoritmos: ', font = ("Arial",15), borderwidth=1, bg = "black" , fg = 'white')
label.grid(row=0,column=0,  padx=5, pady=5, sticky = W)

menu = ttk.Combobox(box, textvariable = algoritmo, values=['BUBBLE SORT', 'MERGE SORT', 'HASH TABLES', 'ARBOL AVL', 'ARBOLES ROJO Y NEGRO'])
menu.grid(row=0, column=1, padx=5, pady=5)
menu.current(0)

botonStart = Button(box, text = 'Iniciar', command = Iniciar, bg = 'lime green')
botonStart.grid(row = 0, column = 2, padx = 5, pady = 5)

#Row-1 
label = Label(box, text='Insertar valor: ', font = ("Arial",15), borderwidth=1, bg = "black" , fg = 'white')
label.grid(row=1,column=0, padx = 5, pady = 5, sticky = W)
inputVal = Entry(box)
inputVal.grid(row=1,column=1, padx = 5, pady = 5, sticky = W)

botonAdd = Button(box, text = 'Agregar', command = agregar, bg = 'lime green')
botonAdd.grid(row = 1, column = 2,  padx = 5, pady = 5, sticky = W)

botonClear = Button(box, text = 'Limpiar', command = limpiar, bg = 'lime green')
botonClear.grid(row = 1, column = 3,  padx = 5, pady = 5, sticky = W)


tk.mainloop()

1 个答案:

答案 0 :(得分:1)

您在此处定义 Iniciar

def Iniciar(data):
    print("Se selecciono: " + algoritmo.get())
 
    dibujar(a)

但是当您在下面调用它时,您并没有向它传递 data 参数

botonStart = Button(box, text = 'Iniciar', command = Iniciar, bg = 'lime green')