Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/48: Рейтинг темы: голосов - 48, средняя оценка - 4.96
 Аватар для inwar
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 30

Как связать кнопку с разными событиями в tkinter?

04.09.2013, 23:14. Показов 10147. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, почему так происходит? (Python 3.2, windows7)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python32
from tkinter import *
from tkinter.filedialog  import askopenfilename
def ChooseFile(event): 
    a = askopenfilename()
root=Tk()
#простой способ - через параметр "command" - все нормально, кнопка не
#западает, а возвращается после нажатия обратно
outdirbtn=Button(root, text="Open File Dialog", command = askopenfilename)
 
# нажатием на кнопку правой клавишей мыши - тоже все О.К.
outdirbtn.bind("<Button-3>", ChooseFile) 
 
# через фокус клавишей "Enter" - тоже все О.К.
outdirbtn.bind("<Return>", ChooseFile) 
 
#а вот здесь странное поведение: при нажатии левой клавишей мыши 
#кнопка после диалога выбора файла "западает", т.е. не возвращается в верхнее положение 
# и остается "нажатой" 
outdirbtn.bind("<Button-1>", ChooseFile)
 
outdirbtn.pack()
root.mainloop()
Кто знает - что это за странное реагирование виджета класса Button в результате разных способов нажатий кнопки?
Необходимо чтобы кнопка реагировала как на левую клавишу мыши, так и на Enter и не западала.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2013, 23:14
Ответы с готовыми решениями:

Несколько кликов с разными событиями при нажатии на кнопку
Код я подсократил могут существовать некие ошибки потому что часть кода взята из частичного представления... &lt;script...

Как связать tkinter c numpy, matplotlib?
Сделал окно c помощью tkinter, принимает значения a,b,c, интервал (x1,x2), также шаг (k). Сделал вывод графика с помощью...

Как реализовать "зажатие" и клик по одной кнопки с разными событиями?
Необходимо создать на кнопку два события. Первое при однократном щелчке. Второе при зажатии на кнопке мышью 2-3 секунды. Пытался делать...

8
 Аватар для pashtet-kun
135 / 120 / 37
Регистрация: 30.09.2012
Сообщений: 400
05.09.2013, 21:33
а чем первый случай через command не устраивает?
0
 Аватар для inwar
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 30
05.09.2013, 21:49  [ТС]
через command работает только левая клавиша мыши, а кнопка в самой программе должна реагировать и на левую клавишу мыши и на кнопку Enter через фокус ввода, для тех кто предпочитает работать с клавиатурой
0
 Аватар для pashtet-kun
135 / 120 / 37
Регистрация: 30.09.2012
Сообщений: 400
05.09.2013, 21:54
а по сути вопроса - видимо такая реализация - подробности смотри в tcl\tk8.5\button.tcl

Добавлено через 1 минуту
после выбора файла заставь кнопку "отжаться" и получишь требуемое поведение

Добавлено через 1 минуту
Цитата Сообщение от inwar Посмотреть сообщение
через command работает только левая клавиша мыши, а кнопка в самой программе должна реагировать и на левую клавишу мыши и на кнопку Enter через фокус ввода, для тех кто предпочитает работать с клавиатурой
не понял - ведь command и бинд на Enter друг другу не мешают
0
 Аватар для inwar
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 30
05.09.2013, 21:58  [ТС]
может быть, но и с правой клавишей мыши проблем нет, как и с Enter-ом.... только левая "косячит"... а как ее заставить отжаться? Почему правую нет необходимости заставлять?
0
 Аватар для pashtet-kun
135 / 120 / 37
Регистрация: 30.09.2012
Сообщений: 400
05.09.2013, 22:12
ну потому что реакция на command - это по умолчанию реакция на нажатие левой кнопки мыши плюс ее отжатие (т.е command = нажатие + отжатие). Этот биндинг стандартен в tk. А биндинг на левую кнопку мыши - это просто биндинг на левую кнопку мыши (кнопка просто входит в нажатое состояние) )))) Ну я это так понимаю.

Добавлено через 6 минут
как заставить ее отжаться - что-то в голову ничего не лезет, старый я стал... возможно нужно просто задать нужную опцию relief, т.е. визуально сделать ее не нажатой
1
 Аватар для inwar
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 30
05.09.2013, 22:13  [ТС]
Да я вот тоже так предполагаю, т.к. именно левую клавишу мыши используют для других событий (перетаскивание, выделение и т.д.), т.е. ее функционал по определению должен быть расширен , а правую, в основном, только на нажатие (ну типа command для левой)... вот где только хорошую инфу по этому найти. Т.к. предполагать это хорошо, а надо-бы знать.
0
 Аватар для pashtet-kun
135 / 120 / 37
Регистрация: 30.09.2012
Сообщений: 400
06.09.2013, 07:28
хорошая инфа - исходники на tcl в папке питона- путь указывал ранее (для 2-го питона)
0
 Аватар для inwar
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 30
06.09.2013, 11:00  [ТС]
Решено. Подсказали на другом форуме - надо в bind использовать инструкцию <ButtonRelease-1>, тогда все работает нормально и кнопка "отжимается" после закрытия окна выбора файла.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2013, 11:00
Помогаю со студенческими работами здесь

Запуск процесса двумя разными событиями
Всем привет. Возможно ли сделать так, чтобы срабатывала какая-либо функция при разных событиях? Мне нужно, чтобы отправлялся AJAX-запрос...

Сделать выборку между событиями с разными вероятностями
Здравствуйте, как реализовать такое? Есть событие A1, A2, ... Ai и есть массив распределения этих вероятностей p{P(A1), P(A2), P(A3),...

Сделать выборку между событиями с разными вероятностями
Добрый день. Есть следующая задача. Допустим дано n вариантов, вероятность наступления каждого различна. Надо получить вариант. ...

Как связать две виртуальные машины с разными подсетями в VMware workstation 16
Помогите пожалуйста, необходимо связать две виртуальные машины (ВМ) с разными подсетями в VMware® Workstation 16 Pro; версия: 16.1.0...

Как сделать кнопку суммирования значений двух Entry в Tkinter?
Привет, не могу решить задачу по GUI, Python. Не могли бы вы мне подсказать, как вывести функцию для суммированного результата двух...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru