Найти - Пользователи
Полная версия: button widget Tkinter
Начало » Центр помощи » button widget Tkinter
1
_SSS_
Дорого времени суток.
Вот простенький код:
#!/usr/bin/python
#-*- coding: utf-8 -*-

from Tkinter import*

root=Tk()

def button_on():
print ‘Press Button’
def quit(enev):
root.quit()

Button(root, text='Up',command=button_on).pack()

root.bind('<Escape>',quit)
root.mainloop()
Но есть одно НО!: Выводится сообщение только один раз, когда пользователь отпускает кнопку “Up”.
Нужно чтоб выводилось сообщение когда пользователь нажимает кнопку “Up”

4kpt_III
.bind("<Button-1>", button_on)
_SSS_
4kpt_III
Благодарю за совет.
Но это обход функций Button. Значит не поддерживает widget Button действие на нажатия кнопки “Up”

В прикрепленном файле получилось такое решение, но оно не без изъянов!!!
Если мышкой кликнуть мимо кнопок, то в терминале выдается сообщение об ощибке!!!
Ее можно исключить используя , но при этом не видно что нажата кнопка!!!

Надо получить: Чтоб было видно нажатия кнопок, но при этом не выдавались ошибки!

_SSS_
Используя: root.bind_class('Button', ‘<ButtonPress-1>’, button_on)
4kpt_III
_SSS_
Но это обход функций Button. Значит не поддерживает widget Button действие на нажатия кнопки “Up”

Чего?

_SSS_
Используя: root.bind_class('Button', ‘<ButtonPress-1>’, button_on)

Вы не понимаете что это такое и зачем оно надо…

Еще раз.

.bind("<Button-1>", button_on)

Аналогично

.bind("<ButtonPress-1>", button_on)

Аналогично

.bind("<1>", button_on)

Аналогично

.bind("<B-1>", button_on)
_SSS_
4kpt_III
либо вы не запускаете примеры и не видите очевидные ошибки, либо вы не понимаете поставленной задачи.
все что вы описываетие, это реакция на кнопку мыши >>> .bind(“<1>”, button_on)!!!

Если я не понимаю, напишите полностью код решения проблемы!!! а не обрывки кода…
Токда прольется свет в этот мир)))
4kpt_III
Вы наколбасили какого-то уродства с глобальным обвешиванием клавиш. А если еще кнопки добавятся? Их евенты тоже будут лететь на эту функцию.

Правильным решением является вывешивание callback функции на каждый виджет отдельно. Если callback функция одинаковая, то для вывешивания можно использовать цикл. НО!!! Вешать одну функцию на все виджеты одного класса является недопустимым. .bind_class используется для добавления к всем кнопкам специальной реакции на какие-то события. И у Вас явно не тот случай.
_SSS_
Это не уродство. это кнопки управления микроконтроллером! Привязку к клавиатуре реализовал без проблем. а вот визуалицацию и действие при нажатии по кнопкам – с касиками в библиотеке Tkinter, но в PyQt все разрешилось за 5 минут без выноса мозга. Неужели с помошью Tkinter можно реализовать только через танец с бубном???))))))))))))))))))) Была идея написание программы для запуска на различных платформах Linux and Windows. Tkinter идет с Python как стандартная библиотека!!! Поэтому хотел реализовать именно на ней.
4kpt_III
_SSS_
Это не уродство. это кнопки управления микроконтроллером!

Уродство - это решение, которое Вы предложили. Используйте bind для каждой клавиши отдельно или назначайте его в цикле. bind_class нужен не для этого!

_SSS_
Привязку к клавиатуре реализовал без проблем. а вот визуалицацию и действие при нажатии по кнопкам – с касиками в библиотеке Tkinter, но в PyQt все разрешилось за 5 минут без выноса мозга. Неужели с помошью Tkinter можно реализовать только через танец с бубном???)))))))))))))))))))

Если Вы его не знаете и знать не хотите, тогда да, будет вынос мозга. Пишете на PyQt и не мучайтесь. Тем более, что PyQt сейчас более распространен. Можно и без танцев с бубном, но нужно читать предварительно документацию или смотреть примеры. Потому как Tkiner все же не PyQt и многие механизмы здесь реализованы по-другому.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB