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

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

04.09.2013, 23:14. Показов 10101. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru