Найти - Пользователи
Полная версия: Нужна помощь по созданию кнопок в Tkinter
Начало » Python для новичков » Нужна помощь по созданию кнопок в Tkinter
1
Twist
Хотел создать поле 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, то есть последние числа в цикле, подскажите пожалуйства, в чем проблема, где ошибка?
xam1816
О чем вы подумали,когда увидели свой представленный код без отступов?

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

Twist
xam1816
Теперь все понятно, огромное спасибо за помощь!
Twist
xam1816
Я e-mail тебе отправил, не знаю получил ли, не знаю увидишь ли здесь, но попрошу, помоги удалить теперь эти кнопки, по нажатию, ну допустим пробела, буду очень благодарен!)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB