Return self func args ошибка

I’m fairly new to python and can’t get a test program functioning. The goal was to create an address book using objects to hold information. The widget runs but when a button is clicked instead of updating I get the error

"Exception in Tkinter callback
Traceback (most recent call last):

File "C:UsersneuvillerlDesktopPython27liblib-tkTkinter.py", line 1542, in __call__
    return self.func(*args)

  File "C:Usersneuvillerlworkspacevtk_testingwid.py", line 71, in <lambda>
    btns = Tkinter.Button(nam, text = x.get_name(), command= lambda x=x: update(x),bg = 'blue', fg = 'white')

  File "C:Usersneuvillerlworkspacevtk_testingwid.py", line 61, in update
    lbl5.configure(nam, text = "name: " + str(person.get_name()))

  File "C:UsersneuvillerlDesktopPython27liblib-tkTkinter.py", line 1331, in configure
    return self._configure('configure', cnf, kw)

  File "C:UsersneuvillerlDesktopPython27liblib-tkTkinter.py", line 1322, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
TclError: unknown option "-colormap""

And the code :

nam = Tkinter.Tk()

class person(object):


def __init__(self, name, phone, address, email):
    self.name = name
    self.phone = phone
    self.address = address
    self.email = email

def get_name(self):
    return self.name
def get_phone(self):
    return self.phone
def get_address(self):
    return self.address
def get_email(self):
    return self.email

riley = person("Riley", "XXX-XXX-XXXX", "This place", "email1@hi.com")
alex = person("Alex","XXX-XXX-XXXX", "That place", "email2@hi.com")
maggie = person("Maggie","XXX-XXX-XXXX","Other place","email3@hi.com")
lst = [riley,alex,maggie]
def update(person):
    lbl5.configure(nam, text = "name: " + str(person.get_name()))
    lbl6.configure(nam, text = "phone#: " + str(person.get_phone()))
    lbl7.configure(nam, text = "address: " + str(person.get_address()))
    lbl8.configure(nam, text = "email: " + str(person.get_email()))
lbl5 = Tkinter.Label(nam, text = "name:" )
lbl6 = Tkinter.Label(nam, text = "phone#:" )
lbl7 = Tkinter.Label(nam, text = "address:" )
lbl8 = Tkinter.Label(nam, text = "email:" )

for x in lst:
    btns = Tkinter.Button(nam, text = x.get_name(), command= lambda x=x: 
 update(x),bg = 'blue', fg = 'white')
    btns.pack(fill = Tkinter.X)
lbl5.pack()
lbl6.pack()
lbl7.pack()
lbl8.pack()
nam.mainloop()`

Exception in Tkinter callback
Traceback (most recent call last):
File «C:UsersDanilAppDataLocalProgramsPythonPython38libtkinter__init
__.py», line 1892, in __call__
return self.func(*args)
File «tt.py», line 12, in btn_click
messagebox.showinfo(title= ‘Название’, message=info_str)
NameError: name ‘messagebox’ is not defined

from tkinter import*


root = Tk()


def btn_click():
	login = loginInput.get()
	password = passField.get()

	info_str = f'Данные : {str(login)}, {str (password)}'
	messagebox.showinfo(title= 'Название', message=info_str)


	# ошибка
	# messagebox.showerror(title='', message='!!!Ошибка!!!' )


	
root['bg'] = '#fafafa'
root.title ('Название программы')
root.wm_attributes('-alpha', 1)
root.geometry('700x600') 
root.iconbitmap('C:/Users/Danil/Desktop/armchair-icon.ico')

root.resizable(width=True , height=True)

canvas = Canvas(root, height=700, width=600)
canvas.pack()


frame = Frame(root, bg='green')
frame.place(relx=0.15, rely=0.15, relwidth=0.7 , relheight=0.7 )


titel = Label(frame, text='Logerpod', bg='gray', font=40)
titel.pack()
btn= Button(frame, text='Кнопка', bg= 'blue' , command =btn_click )
btn.pack()



loginInput = Entry(frame, bg= 'white')
loginInput.pack()


passField = Entry(frame, bg= 'white', show='*')
passField.pack()



root.mainloop()

Я только начал свой первый проект на Python (извините, если это глупый вопрос, который я только начинаю) и использую интерфейс Tkinter. Я, кажется, продолжаю получать это приглашение:

Исключение в обратном вызове Tkinter (последний вызов был последним): файл «D: Apps Python lib tkinter__init __. Py», строка 1883, в ____call____ возвращают self.func (* args) Файл «c: / Users / noahc / Документы / Программирование / AppLauncher / AppLauncher.py «, строка 62, в resetList = tk.Button (root, text =» Reset «, padx = 10, pady = 5, fg =» white «, bg =» # 263D42 «, command = lambda: [removeSave (), resetList ()]) TypeError: объект ‘Button’ не вызывается

Я предоставил код ниже:

#########################
# CREATED BY NOZZYPOZZY #
#########################
import tkinter as tk
from tkinter import filedialog, Text
import os

root = tk.Tk()

root.title("App Launcher")
root.iconbitmap('C:/Users/noahc/Documents/Programming/AppLauncher/icon.ico')
root.resizable(0,0)

apps = []

if os.path.isfile('save.txt'):
    with open('save.txt','r') as f:
        tempApps = f.read()
        tempApps = tempApps.split(',')
        apps = tempApps
        apps = [x for x in tempApps if x.strip()]


def addApp():

    for widget in frame.winfo_children():
        widget.destroy()

    filename = filedialog.askopenfilename(initialdir="/", title="Select File", filetypes=(("Executables","*.exe"), ("All Files", "*.*")))

    apps.append(filename)
    print(filename)
    for app in apps:
        label = tk.Label(frame, text=app, bg="gray")
        label.pack()

def runApps():
    for app in apps:
        os.startfile(app)

def resetList():
    for widget in frame.winfo_children():
        widget.destroy()

def removeSave():
    os.remove('save.txt')



canvas = tk.Canvas(root, height=700, width=700, bg="gray")
canvas.pack()

frame = tk.Frame(root, bg="white")
frame.place(relwidth=0.8, relheight=0.8, relx=0.1, rely=0.1)

openFile = tk.Button(root, text="Open File", padx=10, pady=5, fg="white", bg="#263D42", command=addApp)
openFile.pack()

runApps = tk.Button(root, text="Run Apps", padx=10, pady=5, fg="white", bg="#263D42", command=runApps)
runApps.pack()

resetList = tk.Button(root, text="Reset", padx=10, pady=5, fg="white", bg="#263D42", command=lambda:[removeSave(),resetList()])
resetList.pack()




for app in apps:
    label = tk.Label(frame, text=app)
    label.pack()

root.mainloop()


with open('save.txt', 'w') as f:
    for app in apps:
        f.write(app + ',')

Спасибо,
nozzypozzy

2 ответа

Лучший ответ

Я полагаю, вы имеете в виду, что после нажатия кнопки сброса, затем «Открыть файл», и он заполняет ваш список с предыдущими записями? Когда вы выполняете resetList, вы просто удаляете элементы с экрана, но сохраняете заполненный список apps, поэтому при вызове addApp этот список загружается и отображается снова с новым элементом в конце. Это можно исправить, вызвав apps.clear() в функции resetList, которая удалит все записи в apps. — ответ @Talon


0

nozzypozzy
4 Май 2020 в 06:37

Ваша функция resetList делит имя с вашей переменной Button. Вместо вашей функции он пытается вызвать себя.

На этой линии:

resetList = tk.Button(root, text="Reset", padx=10, pady=5, fg="white", bg="#263D42", command=lambda:[removeSave(),resetList()])

Вы используете лямбда-функцию для выполнения функций removeSave и resetList. Проблема в том, что переменная, которой вы назначаете эту кнопку, также называется resetList. Мы можем проверить это, когда заменим вызов функции и вместо этого выведем, что resetList:

resetList = tk.Button(root, text="Reset", padx=10, pady=5, fg="white", bg="#263D42", command=lambda:[removeSave(),print(repr(resetList))])

После исполнения это даст нам <tkinter.Button object .!button3> Вы вызвали свою функцию resetList, но переписали ее с помощью кнопки, которая также называется resetList, поэтому вместо выполнения функции с resetList() ваша программа пытается выполнить кнопку. Это можно исправить, например, переименовав переменную Button, например:

reset_list_button = tk.Button(root, text="Reset", padx=10, pady=5, fg="white", bg="#263D42", command=lambda:[removeSave(),resetList()])
reset_list_button.pack()


2

Talon
2 Май 2020 в 11:32

from tkinter import *
from functools import partial
from tkinter.messagebox import *
import re




 

#текст
a="Авторизируйтесь" #Зоглоловок окна
b="Вход в приложение"#Текст в приложениии
c="Пожайлуста введите данные:"#Текст в приложение 2
d="Вы зарагистрированны?"#Вопрос о регистрации пользовотеля
e="Придумайте надежный логин и пароль"
f="Регистрация"


#Логины
namelist = ["ilia"]
#Пароли
passwdlist= ["2" "1"]

window = Tk()
window.title(a)


text1=Label(text=b)
text1.pack(fill=BOTH, expand=True)

text2=Label(text=c)
text2.pack(fill=BOTH, side=LEFT, expand=True)

entryLOGIN = Entry()
entryLOGIN.insert(0,"Логин")
entryLOGIN.pack(fill=BOTH, side=LEFT, expand=True)


entryPASS = Entry()
entryPASS.pack(fill=BOTH, side=LEFT, expand=True)
entryPASS.insert(0,"Пароль")


i=0


#Оценка стойкости пароля
def ChekDATA(entryEPASS,entryELOGIN,namelist,passwdlist):
  passw=entryEPASS.get()
  name=entryELOGIN.get()
  fl=0
  a=0
  while True:
    if (len(passw)<8):
      fl=-1
      break
    elif not re.search("[a-z]",passw):
      fl=-1
      break
    elif not re.search ("[A-Z]",passw):
      fl=-1                   
      break   
    elif not re.search("[0-9]",passw):
      fl=-1   
      break   
    elif re.search("s",passw):
      fl=-1
      break
  if fl==0:
    passwdlist.append(passw)
    a=a+1
  while True:
    if (len(name)<8):

      fl=-1
      break
    elif not re.search("[a-z]",name):
      fl=-1
      break
    elif not re.search ("[A-Z]",name):
      fl=-1                   
      break   
    elif not re.search("[0-9]",name):
      fl=-1   
      break   
    elif re.search("s",name):
      fl=-1
      break
  if fl==0:
    namelist.append(name)
    a=a+1
  if a==2:
    avt(passwdlist,namelist,a,b,c,d,e,f,window)
  else:
    showinfo("Информация","Пароль ненадежн повторите попытку")
    reg(window)   



#Приложение регистрации
def reg(window):
  window.destroy()
  Regw= Tk()
  Regw.title(f)

  text1E=Label(text=e)
  text1E.pack(fill=BOTH, expand=True)

  text2E=Label(text=c)
  text2E.pack(fill=BOTH, side=LEFT, expand=True)

  entryELOGIN = Entry()
  entryELOGIN.insert(0,"Логин")
  entryELOGIN.pack(fill=BOTH, side=LEFT, expand=True)


  entryEPASS = Entry()
  entryEPASS.pack(fill=BOTH, side=LEFT, expand=True)
  entryEPASS.insert(0,"Пароль")

  buttonREG = Button(text="Ввести",command=partial
  (
  ChekDATA,
  entryPASS,
  entryLOGIN,
  namelist,
  passwdlist
  ))
  buttonREG.pack(fill=BOTH, side=BOTTOM, expand=True)
 

def avt(passwdlist,namelist,a,b,c,d,e,f,window):   
  #Приложение авторизации
  window.destroy()
  window = Tk()
  window.title(a)


  text1=Label(text=b)
  text1.pack(fill=BOTH, expand=True)

  text2=Label(text=c)
  text2.pack(fill=BOTH, side=LEFT, expand=True)

  entryLOGIN = Entry()
  entryLOGIN.insert(0,"Логин")
  entryLOGIN.pack(fill=BOTH, side=LEFT, expand=True)


  entryPASS = Entry()
  entryPASS.pack(fill=BOTH, side=LEFT, expand=True)
  entryPASS.insert(0,"Пароль")


  i=0
  #Функция авторизации и проверки паролей на подлинность
  def increase(namelist,passwdlist,entryLOGIN,entryPASS,i):
    p=entryPASS.get()
    name=entryLOGIN.get()
    
    while i<10:
      if name in namelist:
        print("имя есть")
        if p in passwdlist:
          print(a)
          window.destroy()
          main(name)
        else:
          
          entryPASS.delete(0,END)
          i=+1
      else :
        showerror(
      "Ошибка","Введен неверный логин"
      )   
        enrtyLOGIN.delete(0,END)
        i=+1
    else:
      showerror(
      "Ошибка","Попытки кончились"
      )
      


  buttonVXOD = Button(
        master=window,
        text="Войти",
        command=partial(increase,
        namelist,
        passwdlist,
        entryLOGIN,
        entryPASS,
        i
      )
    )
  buttonVXOD.pack(fill=BOTH, side=BOTTOM, expand=True)





  #Вопрос о том зарегистрирован ли пользователь
def check():
  answer = askyesno(
  title="Вопрос",
  message=d
  )
  if answer:
    avt(passwdlist,namelist,a,b,c,d,e,f,window)
  else:
    reg(window)
      
    
check()









window.mainloop()

Jan-04-2017, 04:58 PM
(This post was last modified: Jan-04-2017, 05:07 PM by snippsat.)

New to Python. No matter what I enter, it doesn’t like the arguments in the function. Appreciate any help.

Error:

Exception in Tkinter callback Traceback (most recent call last):   File "C:Python27liblib-tkTkinter.py", line 1536, in __call__     return self.func(*args) TypeError: go() takes exactly 1 argument (0 given)

The function is inside a class and the command for a button. It takes entries from two entry boxes and a spinbox. The time part works fine separately, and it does get the spinbox info ok.   

def go(self):
        def time():
            e1= entry1.get()
            e2= entry2.get()
            run_time_min= float(e1)
            run_time_sec= float(e2)
            time= run_time_min * 60 + run_time_sec
            return time
        
        def calc():
            sb1 = spinbox1.get()
            if sb1 == '8mm':
                feet=time/fpsecs8
                print feet
            elif sb1 == 'Super 8':
                feet= time/fpsecss8
                print feet
            elif sb1 == '16mm':
                feet= time/fpsecs16
                print feet
            elif sb1 == '16 Sound':
                feet= time/fpsecs16s
                print feet

Posts: 11,664

Threads: 451

Joined: Sep 2016

Reputation:
446

You aren’t showing enough code.
Where is your class definition, and the code that calls it ?
Your passing args, but the functions that you are showing don’t receive any

Posts: 16

Threads: 3

Joined: Jan 2017

Reputation:
0

Jan-04-2017, 06:15 PM
(This post was last modified: Jan-04-2017, 06:22 PM by snippsat.)

Sorry. Here’s more.

class FilmCalc(Frame):
 
   def __init__(self, parent):
       Frame.__init__(self, parent)    
       self.parent = parent
       self.initUI()
       
   def initUI(self):
       self.parent.title("Film Calculator")
       self.grid

       frame1 = Frame(root)
       frame1.grid

   frame_rate_8=float(17)
   frame_rate_s8 = float(17)
   frame_rate_16 = float(20)
   frame_rate_16s = float(24)
   fpft8 = float(80)
   fpfts8 = float(72)
   fpft16 = float(40)
   fpsecs8 = fpft8/frame_rate_8
   fpsecss8 = fpfts8/frame_rate_s8
   fpsecs16 = fpft16/frame_rate_16
   fpsecs16s = fpft16/frame_rate_16s
   global spinbox1
   global entry1
   global entry2
   entry1 = IntVar(None)
   entry2 = IntVar(None)
   global time
   
   def go(self):
       def time():
           e1= entry1.get()
           e2= entry2.get()
           run_time_min= float(e1)
           run_time_sec= float(e2)
           time= run_time_min * 60 + run_time_sec
           return time
       
       def calc():
           sb1 = spinbox1.get()
           if sb1 == '8mm':
               feet=time/fpsecs8
               print feet
           elif sb1 == 'Super 8':
               feet= time/fpsecss8
               print feet
           elif sb1 == '16mm':
               feet= time/fpsecs16
               print feet
           elif sb1 == '16 Sound':
               feet= time/fpsecs16s
               print feet

   def reset():
           entry1.delete(0, END)
           entry2.delete(0, END)
           spinbox1.selection_clear()

   spinbox1 = Spinbox(root, values= ("8mm", "Super 8", "16mm", "16 Sound"), wrap = TRUE)
   spinbox1.grid(row=0, column=1, padx=105, pady=15)
   
   lbl1 = Label(root, text="Minutes", width=8)
   lbl1.grid(row=2, column=2, pady=15, sticky=W)           
  
   entry1 = Entry(root, justify= RIGHT)
   entry1.grid(row=2, column=1, pady=15)
   
   lbl2 = Label(root, text="Seconds", width=8)
   lbl2.grid(row=3, column=2, sticky=W)        

   entry2 = Entry(root, justify= RIGHT)
   entry2.grid(row=3, column=1)
   
   resetButton = Button(root, text="Reset", command= reset)
   resetButton.grid(row=4, column=1, pady=100)
   
   calcButton = Button(root, text="Calculate", command= go)
   calcButton.grid(row=4, column=2)

Edit admin:
Use code tag,look BBcode help.

Posts: 11,664

Threads: 451

Joined: Sep 2016

Reputation:
446

Jan-04-2017, 09:16 PM
(This post was last modified: Jan-04-2017, 09:16 PM by Larz60+.)

Did you import tkinter like

from tkinter import *

Posts: 16

Threads: 3

Joined: Jan 2017

Reputation:
0

Jan-04-2017, 09:31 PM
(This post was last modified: Jan-04-2017, 11:20 PM by Larz60+.)

Yes. It makes the window and fields correctly, but fails when pressing the calculate button.


from Tkinter import *

root = Tk()
root.geometry("450x350+200+100")

class FilmCalc(Frame):
  
    def __init__(self, parent):
        Frame.__init__(self, parent)    
        self.parent = parent
        self.initUI()
        
    def initUI(self):
        self.parent.title("Film Calculator")
        self.grid

        frame1 = Frame(root)
        frame1.grid

    frame_rate_8=float(17)
    frame_rate_s8 = float(17)
    frame_rate_16 = float(20)
    frame_rate_16s = float(24)
    fpft8 = float(80)
    fpfts8 = float(72)
    fpft16 = float(40)
    fpsecs8 = fpft8/frame_rate_8
    fpsecss8 = fpfts8/frame_rate_s8
    fpsecs16 = fpft16/frame_rate_16
    fpsecs16s = fpft16/frame_rate_16s
    global spinbox1
    global entry1
    global entry2
    entry1 = IntVar(None)
    entry2 = IntVar(None)
    global time
    
    def go(self):
        def time():
            e1= entry1.get()
            e2= entry2.get()
            run_time_min= float(e1)
            run_time_sec= float(e2)
            time= run_time_min * 60 + run_time_sec
            return time
        
        def calc():
            sb1 = spinbox1.get()
            if sb1 == '8mm':
                feet=time/fpsecs8
                print feet
            elif sb1 == 'Super 8':
                feet= time/fpsecss8
                print feet
            elif sb1 == '16mm':
                feet= time/fpsecs16
                print feet
            elif sb1 == '16 Sound':
                feet= time/fpsecs16s
                print feet

    def reset():
            entry1.delete(0, END)
            entry2.delete(0, END)
            spinbox1.selection_clear()

    spinbox1 = Spinbox(root, values= ("8mm", "Super 8", "16mm", "16 Sound"), wrap = TRUE)
    spinbox1.grid(row=0, column=1, padx=105, pady=15)
    
    lbl1 = Label(root, text="Minutes", width=8)
    lbl1.grid(row=2, column=2, pady=15, sticky=W)           
   
    entry1 = Entry(root, justify= RIGHT)
    entry1.grid(row=2, column=1, pady=15)
    
    lbl2 = Label(root, text="Seconds", width=8)
    lbl2.grid(row=3, column=2, sticky=W)        

    entry2 = Entry(root, justify= RIGHT)
    entry2.grid(row=3, column=1)
    
    resetButton = Button(root, text="Reset", command= reset)
    resetButton.grid(row=4, column=1, pady=100)
    
    calcButton = Button(root, text="Calculate", command= go)
    calcButton.grid(row=4, column=2) 
    
    #lbl3 = Label(root, text= entry1.cget())
    #lbl3.grid(row=5, column=1, pady= 100)
  
app = FilmCalc(root)
root.mainloop()

Posts: 11,664

Threads: 451

Joined: Sep 2016

Reputation:
446

Posts: 16

Threads: 3

Joined: Jan 2017

Reputation:
0

It’s the command for the calcButton.

Posts: 11,664

Threads: 451

Joined: Sep 2016

Reputation:
446

Jan-05-2017, 06:10 PM
(This post was last modified: Jan-05-2017, 06:10 PM by Larz60+.)

Didn’t find it first time

you need

def go(self, event):

Posts: 16

Threads: 3

Joined: Jan 2017

Reputation:
0

Error:

Exception in Tkinter callback
Traceback (most recent call last):
  File «C:Python27liblib-tkTkinter.py», line 1536, in __call__
    return self.func(*args)
TypeError: go() takes exactly 2 arguments (0 given)

I had tried that before, and it still gives the above error.

Posts: 11,664

Threads: 451

Joined: Sep 2016

Reputation:
446

Jan-05-2017, 06:22 PM
(This post was last modified: Jan-05-2017, 06:23 PM by Larz60+.)

Возможно, вам также будет интересно:

  • Restart trusted cs go ошибка
  • Rest api выдал ошибку wordpress
  • Resource panorama ошибка кс го
  • Resideo dkg 972 n коды ошибок
  • Resident evil village ошибка установки

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии