Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/30: Рейтинг темы: голосов - 30, средняя оценка - 4.70
inwar
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 30
1

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

04.09.2013, 23:14. Просмотров 5875. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 23:14
Ответы с готовыми решениями:

Tkinter, еще не нажал на кнопку, а событие произошло. И как скрыть терминал в программе с графическим интерфейсом
Тестирую библиотеку Thinter (python 2.7). Хочу сделать так, чтобы при нажатии на кнопку скрывались...

Tkinter обработка нажатий на кнопку
Добрый день, хотелось бы узнать, как можно сделать неактивной кнопку после 5 нажатий на нее? И...

Работаю с библеотекой tkinter и хочу создать кнопку задав ему положение 'both', но выходит ошибка(внизу)
Делал по примеру https://habrahabr.ru/post/133337/, но ошибка говорит что у мя есть токо top,...

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

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

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

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

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

Добавлено через 6 минут
как заставить ее отжаться - что-то в голову ничего не лезет, старый я стал... возможно нужно просто задать нужную опцию relief, т.е. визуально сделать ее не нажатой
1
inwar
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 30
05.09.2013, 22:13  [ТС] 7
Да я вот тоже так предполагаю, т.к. именно левую клавишу мыши используют для других событий (перетаскивание, выделение и т.д.), т.е. ее функционал по определению должен быть расширен , а правую, в основном, только на нажатие (ну типа command для левой)... вот где только хорошую инфу по этому найти. Т.к. предполагать это хорошо, а надо-бы знать.
0
pashtet-kun
135 / 120 / 37
Регистрация: 30.09.2012
Сообщений: 395
06.09.2013, 07:28 8
хорошая инфа - исходники на tcl в папке питона- путь указывал ранее (для 2-го питона)
0
inwar
2 / 2 / 0
Регистрация: 03.09.2010
Сообщений: 30
06.09.2013, 11:00  [ТС] 9
Решено. Подсказали на другом форуме - надо в bind использовать инструкцию <ButtonRelease-1>, тогда все работает нормально и кнопка "отжимается" после закрытия окна выбора файла.
1
06.09.2013, 11:00
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 11:00

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

Сделать выборку между событиями с разными вероятностями
Здравствуйте, как реализовать такое? Есть событие A1, A2, ... Ai и есть массив распределения...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.