С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
12 / 12 / 10
Регистрация: 17.06.2016
Сообщений: 70

Функция и Кнопка

04.02.2017, 15:45. Показов 3842. Ответов 6

Студворк — интернет-сервис помощи студентам
Суть в том что код создает много кнопок,и просто их размещает.
Python
1
2
3
4
5
6
7
8
9
10
11
12
from tkinter import *
root=Tk()
y=30
krd=10
kst=15
for rd in range(krd):
    for st in range(kst):
        b=Button(root,bg='darkgreen')
        b.place(x=st*50,y=y,width=50,heigh=50)
        #b['command']=zm(b.place_info()['x'],b.place_info()['y'])
    y+=50
root.geometry('{0}x{1}'.format(kst*50,krd*50+20+30+60+50))
Нужно чтобы при клике на кнопку в функцию заганяло расположение кнопки(мне нужны х и у кнопки на которую кликнули)
пробую
Python
1
2
def zm(x,y):
    print(x,y)
но проблема что не знаю как нормально вызвать функцию и дать ей х и у
Python
1
b['command']=zm(b.place_info()['x'],b.place_info()['y'])
Если так,то функция выполняется только 1 раз,при выполнении цикла, а мне нужно чтоб она выполнялась ТОЛЬКО при клике.
как решить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.02.2017, 15:45
Ответы с готовыми решениями:

Как сделать что бы кнопка добавилась, а предыдущая кнопка не исчезла с страницы?
Как сделать что бы кнопка3 добавилась, а кнопка2 не исчезла с страницы? <?php if (isset($_POST)) echo...

Как сделать что бы кнопка добавилась, а предыдущая кнопка не исчезла с страницы?
Добрый день. Есть кнопка1, которая добавляет кнопку2, следующая в свою очередь создает кнопку3. Вопрос. Как сделать что бы кнопка3...

В схеме есть кнопка и светодиод. Начальное состояние – кнопка не горит
В схеме есть кнопка и светодиод. Начальное состояние – кнопка не горит. 1. Нажатие кнопки в первый раз – светодиод изменяет яркость от...

6
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
04.02.2017, 16:06
Tehnic, нужно обернуть вызов функции в другую функцию (labmda для этого хорошо подходит).
1
12 / 12 / 10
Регистрация: 17.06.2016
Сообщений: 70
04.02.2017, 16:12  [ТС]
как вы это видите?
не могу себе просто представить.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
04.02.2017, 23:28
Лучший ответ Сообщение было отмечено Tehnic как решение

Решение

Tehnic,
Python
1
b['command'] = lambda: zm(b.place_info()['x'],b.place_info()['y'])
0
12 / 12 / 10
Регистрация: 17.06.2016
Сообщений: 70
05.02.2017, 00:21  [ТС]
from tkinter import *
from functools import partial
root=Tk()
def zm(Event,x,y):
print(Event,x)#????
#======================================= ================
y=30
krd=10#k riadkiv
kst=15#k stovpchukiv
for rd in range(krd):
for st in range(kst):
b=Button(root,bg='darkgreen')
b.place(x=st*50,y=y,width=50,heigh=50)
xx=b.place_info()['x']
yy=y
b.bind('<Button-1>', partial(zm,xx,yy))
y+=50

root.geometry('{0}x{1}'.format(kst*50,kr d*50+20+30+60+50))

Добавлено через 8 минут
Спасибо,решил вот так(оказалось что способ с лямбдой открыл полную непахаемость моего кода)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from tkinter import *
from functools import partial
root=Tk()
def zm(Event,x,y):
        print(Event,x)#????
#=======================================================
y=30
krd=10#k riadkiv
kst=15#k stovpchukiv
for rd in range(krd):
    for st in range(kst):
        b=Button(root,bg='darkgreen')
        b.place(x=st*50,y=y,width=50,heigh=50)
        xx=b.place_info()['x']
        yy=y
        b.bind('<Button-1>', partial(zm,xx,yy))
    y+=50
 
root.geometry('{0}x{1}'.format(kst*50,krd*50+20+30+60+50))
Но вот,у меня вопрос к функции зм.
Она принимает 3 переменных
Python
1
b.bind('<Button-1>', partial(zm,xx,yy))
но я не понимаю как именно.
Помогите,обьясните как работает параметр Евент,и партиал.
пробую вивести х и у:
виводит число и
<tkinter.Event object at 0x024D0D70>
Проясните как работает (Event,x,y)
и
partial(zm,xx,yy)
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
05.02.2017, 11:28
Лучший ответ Сообщение было отмечено Tehnic как решение

Решение

Tehnic, functools.partial(func, *args, **keywords) - возвращает partial-объект (по сути, функцию), который при вызове вызывается как функция func, но дополнительно передают туда позиционные аргументы args, и именованные аргументы kwargs. Если другие аргументы передаются при вызове функции, то позиционные добавляются в конец, а именованные расширяют и перезаписывают.

Python
1
2
3
4
5
>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> print(basetwo('10010'))
18
0
12 / 12 / 10
Регистрация: 17.06.2016
Сообщений: 70
05.02.2017, 11:42  [ТС]
Я даже понял это,спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.02.2017, 11:42
Помогаю со студенческими работами здесь

Как сделать так чтобы кнопка не выполняла действие пока не нажата другая кнопка?
как сделать так что бы кнопка не выполняла действие пока не нажата другая кнопка допустим у меня есть 2 кнопки &quot;Мужчина&quot; и...

VBulletin Кнопка Спасибо + кнопка репутация + сокрытие текста
Добрый день. Интересуют моды: 1. Кнопка спасибо 2. Кнопки изменения репутации, возможность задания интервала изменения...

Не работает кнопка Ctrl + левая кнопка мыши в Excel
Не работает кнопка ctrl + левая кнопка мыши в excel.Не выделяются ячейки.Хотя на рабочем столе или в любой папке выделяются любые несколько...

Кнопка загрузки файлов на сервер(не просто кнопка)
Как сделать такую кнопку загрузки , чтобы когда она нажималась был выбор только сфотографировать (тоесть чтобы не было варианта...

Кнопка BS_OWNERDRAW или кнопка со своей картинкой
Есть код, с помощью которого можно менять картинку при нажатии, при фокусе { // ownerdraw button static HBITMAP no_active; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru