1

Тема: Напис чи інформаційне вікно

Допоможіть як можна в одному написі чи інформаційному вікні можна вивести два різні значення? Дякую. Ось зразок
lab1.config(root,text = "Годин: " int(h)+   "хвилин:" int(x))
або
tkinter.messagebox.showinfo(root,text = "Годин: " int(h) +   "хвилин:" int(x) )

2

Re: Напис чи інформаційне вікно

Приклад. Обчислити скільки хвилин та годин  міститься в заданій користувачем кількості днів.

from tkinter import *
import tkinter.messagebox
def день():
 d = int(ent.get())
 h=24*d
 x=60*24*d
lab1.config(root,text = "Годин: " int(h)+   "хвии:" int(x) )
root = Tk()
lab = Label(root, text = "Введіть кількість днів")
lab.place(x=20, y=20)
ent = Entry(root,width = 10)
ent.place(x=20, y=40)
lab1 = Label(root, text = "")
lab1.place(x=20, y=60)
ent1 = Entry(root,width = 10)
ent1.place(x=20, y=100)
but = Button(root, text = "Обчислити", command = день)
but.place(x=20, y=120)
root.mainloop()

Не працює, допоможіть виправити помилку

3

Re: Напис чи інформаційне вікно

ivanmold2001 написав:

Не працює, допоможіть виправити помилку

Ви нечітко висловилися, не працювати воно може й через те, що ви не запустили програму. Тому напишть що саме не працює та що каже компілятор. Здається, я вже бачу помилку(і не одну), але треба, щоби ви її теж побачили та зрозуміли звідкіля черпати інформацію про помилки.

4 Востаннє редагувалося koala (28.01.2022 09:59:23)

Re: Напис чи інформаційне вікно

Ви б краще спершу в консоль вивели, звичайними input та print, а потім розбиралися з tkinter.

Подякували: 0xDADA11C71

5

Re: Напис чи інформаційне вікно

1. По-перше, ви складаєте речі, але не написали поміж ними знаки +.

Ось тут:
lab1.config(root,text = "Годин: " int(h)+   "хвии:" int(x) )
бракує двох плюсів:
lab1.config(root,text = "Годин: " + int(h) +   "хвии:" + int(x) )


2. По-друге, ви складаєте значення різних типів. Рядки не можна складати з числами.

Знаком + позначається дві дуже різних операції:

  • сума (сума 20 і 22 дає 42)

  • та конкатенація (конкатенація 20 і 22 дає 2022).

Щоб відрізняти їх між собою, Python перевіряє типи: для рядків використовується конкатенація ("20" + "22" == "2022"), а для чисел — сума (20 + 22 == 42).

У вашому випадку вам потрібна конкатенація (тому що сума слова «Годин: » не має сенсу, у слова немає математичного значення), тобто вам потрібні рядки. У вас використана не та функція:

  • Функція int дає перетворює свій аргумент в ціле число. int("20") — це те саме, що 20

  • Функція str дає перетворює свій аргумент в ціле число. str(20) — це те саме, що "20"

Тобто вам потрібно замінити в рядку
lab1.config(root,text = "Годин: " + int(h) +   "хвии:" + int(x) )
функцію int на функцію str:
lab1.config(root,text = "Годин: " + str(h) +   "хвии:" + str(x) )


3. Ви поставили пробіл перед рядком, а не всередині рядку. Пробіли всередині виразів ігноруються. Щоб отримати пробіл перед «хвии: » потрібно поставити його всередині лапок: " хвии:.

І, до речі, краще виправити помилки друку в слові «хвилин». Тобто цей рядок:
lab1.config(root,text = "Годин: " + str(h) +   "хвии:" + str(x) )

виглядатиме так:
lab1.config(root,text = "Годин: " + str(h) +  " хвилин:" + str(x) )


4. В-четверте, в функцію config не передається батьківський елемент (у вас це root).

Коли ви створюєте надпис або поле, треба сказати бібліотеці Tk, до якого вікна (або елемента на вікні) це поле належить. Бо у вас може бути скільки завгодно вікон. Тому ми передаємо в рядку ent1 = Entry(root,width = 10) аргумент root.

Але функції config такий аргумент не передається. Тому що бібліотека Tk вже знає, на якому вікні знаходиться надпис, і цього достатньо.

Тому замість:
lab1.config(root,text = "Годин: " + str(h) +  " хвилин:" + str(x) )
треба писати:
lab1.config(text = "Годин: " + str(h) +  " хвилин:" + str(x) )


5. Ну і в-п'яте, у вас цей рядок

lab1.config(root,text = "Годин: " + str(h) +  " хвилин:" + str(x) )

має виконуватися не зразу на початку програми, а коли викликано функцію день. Тобто перед ним треба поставити пробіл, щоб показати, що він належить до фунції день, а не до наступних рядків без пробілу.



В результаті програма стане виглядати так:

from tkinter import *
import tkinter.messagebox
def день():
 d = int(ent.get())
 h=24*d
 x=60*24*d
 lab1.config(text = "Годин: " + str(h) +  " хвилин:" + str(x) )
root = Tk()
lab = Label(root, text = "Введіть кількість днів")
lab.place(x=20, y=20)
ent = Entry(root,width = 10)
ent.place(x=20, y=40)
lab1 = Label(root, text = "")
lab1.place(x=20, y=60)
ent1 = Entry(root,width = 10)
ent1.place(x=20, y=100)
but = Button(root, text = "Обчислити", command = день)
but.place(x=20, y=120)
root.mainloop()

Поспіхів!


P.S. Як на мій смак, друге поле в цій програмі зайве. Я б забрав ці два рядки:

ent1 = Entry(root,width = 10)
ent1.place(x=20, y=100)
Подякували: ivanmold2001, 0xDADA11C7, leofun013