
Подскажите что не так в этой программе(python) from tkinter import* import tkinter.messagebox
window=tkinter.Tk() window.geometry('400x300') '' Label(window,text='Вага в стартових одиницях').place(x=40,y=20) Label(window,text='Пуди').place(x=20,y=40) Label(window,text='Фунти').place(x=20,y=80) entry1=tkinter.Entry(window).place(x=50,y=40) entry2=tkinter.Entry(window).place(x=50,y=80) puds=tkinter.StringVar() funts=tkinter.StringVar() def button_click(): tkinter.messagebox.showinfo('Кг',float(puds.get())*16,38+float(funts.get())* (1 / 40) * 16.38) but=tkinter.Button(window,text='Обчислити',command=button_click) but.place(x=120,y=170) window.mainloop()

Ответы на вопрос

В данной программе имеются следующие ошибки:
1. После строки `''` стоит ненужный символ комментария, который нужно удалить, чтобы код не выдавал ошибку синтаксиса.
2. При создании объектов `entry1` и `entry2` с помощью метода `place()` переменные `entry1` и `entry2` получают значение `None`, поэтому их нельзя использовать для получения введенных значений. Нужно создать объекты `Entry` отдельно, а затем разместить их на экране с помощью метода `place()`, например, так:
entry1 = tkinter.Entry(window)
entry1.place(x=50, y=40)
entry2 = tkinter.Entry(window)
entry2.place(x=50, y=80)
3. В функции `button_click()` вызов метода `tkinter.messagebox.showinfo()` записан неправильно. Нужно поместить все выражение в скобки, чтобы передать его в качестве единого аргумента, например, так:
tkinter.messagebox.showinfo('Кг', float(puds.get()) * 16.38 + float(funts.get()) * (1 / 40) * 16.38)
Здесь я также поправил формулу для перевода пудов и фунтов в килограммы.
Итоговый исправленный код:
from tkinter import *
import tkinter.messagebox
window = Tk()
window.geometry('400x300')
Label(window, text='Вага в стартових одиницях').place(x=40, y=20)
Label(window, text='Пуди').place(x=20, y=40)
Label(window, text='Фунти').place(x=20, y=80)
entry1 = Entry(window)
entry1.place(x=50, y=40)
entry2 = Entry(window)
entry2.place(x=50, y=80)
puds = StringVar()
funts = StringVar()
def button_click():
if entry1.get() == '' or entry2.get() == '':
tkinter.messagebox.showerror('Помилка', 'Будь ласка, введіть значення в обидва поля')
else:
tkinter.messagebox.showinfo('Кг', float(entry1.get()) * 0.4095 + float(entry2.get()) * (1 / 40) * 0.4095)
but = Button(window, text='Обчислити', command=button_click)
but.place(x=120, y=170)
window.mainloop()



В данной программе есть несколько проблем:
Отсутствует импорт модуля
tkinter.messagebox
. Необходимо добавить строкуimport tkinter.messagebox
перед созданием окна.Необходимо использовать отступы для улучшения читаемости кода.
В строке
entry1=tkinter.Entry(window).place(x=50,y=40)
иentry2=tkinter.Entry(window).place(x=50,y=80)
присваивание переменныхentry1
иentry2
происходит после вызова методаplace()
. Таким образом, переменныеentry1
иentry2
получат значениеNone
. Чтобы исправить это, следует разделить создание виджетаEntry
и его размещение на две отдельные строки:
pythonentry1 = tkinter.Entry(window)
entry1.place(x=50, y=40)
entry2 = tkinter.Entry(window)
entry2.place(x=50, y=80)
- В функции
button_click()
в строкеtkinter.messagebox.showinfo('Кг', float(puds.get())*16,38 + float(funts.get())*(1 / 40) * 16.38)
имеется лишний запятая между16
и38
. Это приведет к синтаксической ошибке. Вероятно, вы хотели записать16.38
в качестве значения. Чтобы исправить это, замените запятую на точку:
pythontkinter.messagebox.showinfo('Кг', float(puds.get()) * 16.38 + float(funts.get()) * (1 / 40) * 16.38)
Итоговый исправленный код выглядит так:
pythonfrom tkinter import *
import tkinter.messagebox
window = tkinter.Tk()
window.geometry('400x300')
Label(window, text='Вага в стартових одиницях').place(x=40, y=20)
Label(window, text='Пуди').place(x=20, y=40)
Label(window, text='Фунти').place(x=20, y=80)
entry1 = tkinter.Entry(window)
entry1.place(x=50, y=40)
entry2 = tkinter.Entry(window)
entry2.place(x=50, y=80)
puds = tkinter.StringVar()
funts = tkinter.StringVar()
def button_click():
tkinter.messagebox.showinfo('Кг', float(puds.get()) * 16.38 + float(funts.get()) * (1 / 40) * 16.38)
but = tkinter.Button(window, text='Обчислити', command=button_click)
but.place(x=120, y=170)
window.mainloop()


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili