Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 11, 2021 18:57:32

Twist
Зарегистрирован: 2020-12-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужна помощь по созданию кнопок в Tkinter

Хотел создать поле 10 на 10, чтобы при нажатии на кнопку она дизейблилась (DISABLED), но номер кнопки принимает значение последнего ренджа (range) в цикле, помогите пронумеровать кнопки, типо 0 1, 0 2, и т.д
Вот код:

 import tkinter as tk
win = tk.Tk()
win.geometry('600x600+400+80') 
win.resizable(False, False)
def X_O(x,y):                         
    print(x,y)
def FuncF():
    Man.pack_forget()
    for i in range(10):
        for j in range(10):                 
            tk.Button(win, text = ' ',command=lambda:X_O(i,j)).grid(row=j,column=i,stick='nswe')
            win.grid_columnconfigure({j}, minsize = 60)
            win.grid_rowconfigure({j}, minsize = 60)
Man = tk.Button(win, text = ' ',        
                    command = FuncF,
                    font = ('Arial','25','bold italic'),
                    relief = tk.RAISED,
                    bd = 10,
                    activebackground = '#8B008B')
Man.pack(pady = 20)

По идее должен выдавать каждой кнопке координаты i и j, но при нажатии на все кнопки он выдает координаты 9 9, то есть последние числа в цикле, подскажите пожалуйства, в чем проблема, где ошибка?

Отредактировано Twist (Дек. 12, 2021 11:32:25)

Офлайн

#2 Дек. 11, 2021 21:14:55

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1364
Репутация: +  120  -
Профиль   Отправить e-mail  

Нужна помощь по созданию кнопок в Tkinter

О чем вы подумали,когда увидели свой представленный код без отступов?

 import tkinter as tk
win = tk.Tk()
win.geometry('600x600+400+80')
win.resizable(False, False)
def X_O(e):
    print(e.widget.grid_info()['row'],e.widget.grid_info()['column'])
def FuncF():
    Man.pack_forget()
    for i in range(10):
        for j in range(10):
            b = tk.Button(win, text = ' ')
            b.bind('<Button-1>',X_O)
            b.grid(row=j,column=i,stick='nswe')
            win.grid_columnconfigure({j}, minsize = 60)
            win.grid_rowconfigure({j}, minsize = 60)
Man = tk.Button(
win, text = '',
command = FuncF,
font = ('Arial','25','bold italic'),
relief = tk.RAISED,
bd = 10,
activebackground = '#8B008B')
Man.pack(pady = 20
)
win.mainloop()

Отредактировано xam1816 (Дек. 11, 2021 21:36:01)

Офлайн

#3 Дек. 12, 2021 11:10:00

Twist
Зарегистрирован: 2020-12-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужна помощь по созданию кнопок в Tkinter

xam1816
О чем вы подумали,когда увидели свой представленный код без отступов?
Прошу прощения, не обратил внимание, просто скопировал и вставил, исправлю (подскажите как это сделать, не нашел нужную функцию в редактировании, код написан сам с отступами), появился еще вопрос, а можно ли как-нибудь обратится к кнопки, чтобы при нажатии она блокировалась (DISABLED), ведь вроде бы мы создаем кнопку, а имя ей не присваиваем?

Отредактировано Twist (Дек. 12, 2021 11:11:58)

Офлайн

#4 Дек. 12, 2021 11:13:32

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1364
Репутация: +  120  -
Профиль   Отправить e-mail  

Нужна помощь по созданию кнопок в Tkinter

Twist
подскажите как это сделать, не нашел нужную функцию в редактировании, код написан сам с отступами
код вставлять в теги в редакторе сообщений рядом со смайлом

Офлайн

#5 Дек. 12, 2021 11:21:37

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1364
Репутация: +  120  -
Профиль   Отправить e-mail  

Нужна помощь по созданию кнопок в Tkinter

xam1816
чтобы при нажатии она блокировалась (DISABLED), ведь вроде бы мы создаем кнопку, а имя ей не присваиваем
изменить
 def X_O(e):
    if e.widget['state'] != 'disabled':
        e.widget.config(state='disabled',relief='flat')
        print(e.widget.grid_info()['row'],e.widget.grid_info()['column'])

Офлайн

#6 Дек. 12, 2021 11:40:24

Twist
Зарегистрирован: 2020-12-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужна помощь по созданию кнопок в Tkinter

xam1816
Спасибо, очень помогло, не объясните немного, я правильно понял, что b.bind('<Button-1>',X_O) мы назначаем кнопке функцию и значение ‘е’, передаваемое функции def X_O(e): это типо и есть название кнопки? Почему должно быть в b.bind('<Button-1>',X_O), Button-1?

Отредактировано Twist (Дек. 12, 2021 11:44:01)

Офлайн

#7 Дек. 12, 2021 12:13:29

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1364
Репутация: +  120  -
Профиль   Отправить e-mail  

Нужна помощь по созданию кнопок в Tkinter

Twist
‘е’, передаваемое функции def X_O(e): это типо и есть название кнопки
функции передается событие (event по-английски),в нем есть указание на виджет с которым произошло событие
Twist
Почему должно быть в b.bind('<Button-1>',X_O), Button-1?
<Button-1> это номер кнопки мыши,на которую будет реагировать виджет.

Офлайн

#8 Дек. 12, 2021 12:35:12

Twist
Зарегистрирован: 2020-12-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужна помощь по созданию кнопок в Tkinter

xam1816
Теперь все понятно, огромное спасибо за помощь!

Офлайн

#9 Дек. 12, 2021 18:13:27

Twist
Зарегистрирован: 2020-12-25
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужна помощь по созданию кнопок в Tkinter

xam1816
Я e-mail тебе отправил, не знаю получил ли, не знаю увидишь ли здесь, но попрошу, помоги удалить теперь эти кнопки, по нажатию, ну допустим пробела, буду очень благодарен!)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version