Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Кнопка tkinter python

Инсаф Гирфанов Ученик (39), на голосовании 2 года назад
Я создаю кнопку с параметром fg='black', и создаю функцию со строкой btn['fg']='red'. Но при выполнении функции питон выводит ошибку:
TypeError: 'NoneType' object does not support item assignment

Что делать?
Голосование за лучший ответ
ильяс Ибрагимов Мастер (1121) 2 года назад
Эта ошибка возникает из-за того, что функция возвращает None, а не объект кнопки. Для того, чтобы изменения применялись на самой кнопке, функция должна возвращать объект кнопки.

Можно исправить код, добавив в конце функции оператор return, чтобы возвращать измененный объект кнопки:

```
def change_button_color(btn):
btn['fg'] = 'red'
return btn
```

Теперь, когда вы вызываете эту функцию, она вернет измененный объект кнопки, который вы можете использовать в своем коде:

```
btn = Button(text='Click me', fg='black')
new_btn = change_button_color(btn)
```

Теперь переменная new_btn содержит измененный объект кнопки, у которого цвет текста изменен на красный.
Матвей Булюкин Мастер (1955) 2 года назад
Эта ошибка возникает потому, что метод `configure()` кнопки возвращает значение `None`, а вы пытаетесь изменить атрибут объекта `None` вместо атрибута кнопки.

Чтобы избежать этой ошибки, вы можете сначала сохранить объект кнопки в отдельную переменную, а затем изменить ее параметры:

```python
from tkinter import *

root = Tk()

btn = Button(root, text='Нажми меня', fg='black')
btn.pack()

def change_color():
btn['fg'] = 'red' # изменяем атрибут кнопки
# или btn.configure(fg='red')

print(btn['fg']) # выводим значение атрибута для проверки

btn2 = Button(root, text='Изменить цвет', command=change_color)
btn2.pack()

root.mainloop()
```
Prg Мудрец (10413) 2 года назад
Ошибка возникает потому, что метод `.button()` возвращает `None`, а не объект кнопки. Если вы хотите изменить цвет текста кнопки, вы можете использовать метод `.config()`:

```
from tkinter import *

def change_color():
btn.config(fg='red')

root = Tk()

btn = Button(root, text='Нажми на меня', fg='black', command=change_color)
btn.pack()

root.mainloop()
```

В этом примере при нажатии на кнопку вызывается функция `change_color()`, которая изменяет цвет текста кнопки на красный путем использования метода `.config()`.

P.S. это написал ChatGPT. Если не помогло, можешь спросить на HabrQNA - там нормальные специалисты
Инсаф ГирфановУченик (39) 2 года назад
.config() не работает вообще, не могу понять почему, так же импортировал tkinter как и вы, но прога не знает что это и выводит ошибку
Инсаф ГирфановУченик (39) 2 года назад
Я создал отдельный файл что бы проверить, и я там написал то же самое и у меня получилось, я не могу понять что я не так сделал
Prg Мудрец (10413) Инсаф Гирфанов, я сам хз. ChatGPt - это ИИ
꧁Tester꧂ ︎ Просветленный (21592) 2 года назад
Напиши btn.config(bg="Black")
 def chacnger(): 
btn['fg']='#198019'
btn = Button(root, text='click me',command=chacnger)
btn.pack()
btn.config(bg='green', fg='black')
btn["fg"] = "red"
root.mainloop()
У тебя там скорее всего ошибка где-то при объявлении кнопки. Поскольку
 btn["fg"] = "red" 
Должно работать.
Инсаф ГирфановУченик (39) 2 года назад
Когда я пытаюсь задать к кнопке btn.config(fg="red"), он пишет object has no attribute "config"
Инсаф ГирфановУченик (39) 2 года назад
Я создал отдельный файл что бы проверить, и я там написал то же самое и у меня получилось, я не могу понять что я не так сделал
꧁Tester꧂ ︎ Просветленный (21592) Инсаф Гирфанов, если бы ты скинул весь код, что ты там накалякал, можно было бы выяснить, а так, гадай дальше.
Инсаф ГирфановУченик (39) 2 года назад
 from tkinter import * 

win = Tk()
win.title("Calculator")
win.geometry('270x290')
win.resizable(0, 0)
saved_value = None

def ms():
btn_ms['fg']='red'


btn_ms = Button(win, font=('Calibri 12 bold'), text="MS", width=3, bg='#ebebeb', command=ms).grid(
row=1, column=2, padx=4, pady=3, stick='wens'
)


win.mainloop()
Инсаф Гирфанов Ученик (39) Инсаф Гирфанов, это мой отрывок из кода, где только строки с проблемой
Похожие вопросы