Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 19, 2015 06:59:49

_SSS_
Зарегистрирован: 2015-11-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

button widget Tkinter

Дорого времени суток.
Вот простенький код:
#!/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”

Офлайн

#2 Ноя. 19, 2015 13:56:38

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

button widget Tkinter

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

Офлайн

#3 Ноя. 20, 2015 07:04:03

_SSS_
Зарегистрирован: 2015-11-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

button widget Tkinter

4kpt_III
Благодарю за совет.
Но это обход функций Button. Значит не поддерживает widget Button действие на нажатия кнопки “Up”

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

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

Прикреплённый файлы:
attachment xxx.py (954 байта)

Офлайн

#4 Ноя. 20, 2015 07:07:21

_SSS_
Зарегистрирован: 2015-11-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

button widget Tkinter

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

Офлайн

#5 Ноя. 20, 2015 13:27:19

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

button widget Tkinter

_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)

Офлайн

#6 Ноя. 24, 2015 10:10:50

_SSS_
Зарегистрирован: 2015-11-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

button widget Tkinter

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

Если я не понимаю, напишите полностью код решения проблемы!!! а не обрывки кода…
Токда прольется свет в этот мир)))

Офлайн

#7 Ноя. 24, 2015 12:49:53

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

button widget Tkinter

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

Правильным решением является вывешивание callback функции на каждый виджет отдельно. Если callback функция одинаковая, то для вывешивания можно использовать цикл. НО!!! Вешать одну функцию на все виджеты одного класса является недопустимым. .bind_class используется для добавления к всем кнопкам специальной реакции на какие-то события. И у Вас явно не тот случай.

Офлайн

#8 Ноя. 25, 2015 09:14:12

_SSS_
Зарегистрирован: 2015-11-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

button widget Tkinter

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

Офлайн

#9 Ноя. 25, 2015 14:39:20

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

button widget Tkinter

_SSS_
Это не уродство. это кнопки управления микроконтроллером!

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

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

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version