#python #python_3x #tkinter
объясните пожалуйста почему так работает: import tkinter def recAction(*args): print('ddd') root = tkinter.Tk() row6 = tkinter.Frame(root, borderwidth = 10) row6.pack(side = 'top', fill = 'x') button = tkinter.Button(row6, text = 'Send', height = 20, width = 20, relief = 'raised', cursor = 'hand1', font = ('times', 14, 'bold')) button.bind('', recAction) button.pack() mainloop() а так не работает: import tkinter def recAction(): print('ddd') root = tkinter.Tk() row6 = tkinter.Frame(root, borderwidth = 10) row6.pack(side = 'top', fill = 'x') button = tkinter.Button(row6, text = 'Send', height = 20, width = 20, relief = 'raised', cursor = 'hand1', font = ('times', 14, 'bold')) button.bind(' ', recAction) button.pack() mainloop() сообщение об ошибке такое: Traceback (most recent call last): File "C:\Python33\projects\DVD_LIST\p3_dvd_list_shelve_3d_class_edit_menubar\q.py", line 14, in mainloop() NameError: name 'mainloop' is not defined мне это не понятно так как в интернетах много примеров именно второго типа. например таких
Ответы
Ответ 1
На вызов mainloop ругается потому, что эта функция определена внутри модуля tkinter. Нужно либо вызывать её как tkinter.mainloop(), либо включить её в пространство имен текущего модуля с помощью from tkinter import mainloop и вызывать просто как mainloop(). "Привязываемые" к событиям функции должны иметь как минимум один параметр, в который попадёт объект-событие. Опять же два варианта: смириться, и дать tkinter этот параметр, или объявить функцию recAction без параметров, а привязывать её через прослойку lambda, как предложил alexlz: button.bind('', lambda event: recAction()) Ответ 2
ну спасибо, помогли. хотя и я не понял почему именно нужно передавать аргумент, но теперь по крайней мере проблему буду решать следующим образом: button.bind('', lambda event: recAction(event)) ....... def recAction(event): print('ddd') и mainloop теперь буду записывать так: tkinter.mainloop :)
Комментариев нет:
Отправить комментарий