хочу сделать клавиатурного спамера, не работает функция def

import time
import pyperclip
import keyboard
import tkinter as tk 
from tkinter import *


time.sleep(5)
def spam(text: str, amount: int):
    pyperclip.copy(text)
    for _ in range(amount):
        time.sleep(0.1)
        keyboard.press_and_release('ctrl + v')
        pyautogui.press("enter")


window = Tk()
window.title("spambot")
window.geometry("600x500")
window.resizable(False ,False)
window.config(bg="black")


s = tk.StringVar()
i = tk.IntVar()

l = Label(text= "введите текст для спама:", bg = "black", fg = "green",)
a = Entry(font='Times 15', textvariable = s)
l1 = Label(text= "введите количество сообщений:", bg = "black", fg = "green")
b = Entry(font='Times 15', textvariable = i)
btn = Button(window, text="НАЧАТЬ СПАМ",font='Times 15', fg = "red", command = spam(a.get(), int(b.get())))


l.pack(pady=(130,0))
a.pack()
l1.pack(pady=(10,0))
b.pack()
btn.pack(pady=20)


window.mainloop()


Ответы (1 шт):

Автор решения: gil9red

Вот тут немного неправильно - вы не указываете какую функцию с какими значениями нужно выполнить в command, а вызываете эту функцию и ее результат попадает в command:

btn = Button(window, text="НАЧАТЬ СПАМ",font='Times 15', fg = "red", command = spam(a.get(), int(b.get())))

Нужно обернуть в лямбду:

btn = Button(
    window, 
    text="НАЧАТЬ СПАМ", 
    font='Times 15', fg="red", 
    command=lambda: spam(a.get(), int(b.get()))
)
→ Ссылка