Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 14.04.2024
Сообщений: 25
1

Ввод времени с помощью библиотеки tkinter

24.05.2024, 14:22. Показов 842. Ответов 15

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите, как, используя библиотеку tkinter, написать код, который позволит вводить время в формате "ЧЧ:ММ" так, чтобы это можно было потом использовать в качестве переменной.

Например, мне нужно использовать введенное время в условии, примерно так:
Если "введенное время" больше 12:00 и меньше 13:00 то:
и т.д.

Буду рад любой помощи.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2024, 14:22
Ответы с готовыми решениями:

Рандомный ввод элементов матрицы с помощью библиотеки numpy
Реализуйте рандомный ввод элементов матрицы с помощью библиотеки numpy. Необходимо обработать...

Считать данные амперметра в реальном времени с помощью библиотеки gpib
Прошу помочь с написанием кода. Суть в чем амперметр подключен к компу через шину. Нужно считывать...

Структура "Читатель библиотеки", не получается ввод времени
нужно создать сруктуру, которая содержит номер читательского билетовфамилии авторовназвания...

График функции с использованием библиотеки tkinter
Здравствуйте, помогите пж сделать график функции только с использованием tkinter в Python, он...

Ввод на русском tkinter
Кода делаю ввод на русском языке с консоли, все нормално работает, а когда пробую с Tkinterom, то в...

15
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,786
Записей в блоге: 9
24.05.2024, 16:13 2
Python
1
2
3
4
>>> import datetime
>>> d = datetime.datetime.strptime('12:55', '%H:%M').time()
>>> datetime.time(12, 0) < d < datetime.time(13, 0)
True
0
0 / 0 / 0
Регистрация: 14.04.2024
Сообщений: 25
24.05.2024, 16:39  [ТС] 3
Допусти оно работает, но в самом начале я указал что будет использоваться библиотека tkinter, и собственно вопрос в том, можно ли в созданном меню сделать текстовое поле, или что-то в этом роде, куда человек будет заносить время, которое потом можно будет использовать как переменную?
0
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,786
Записей в блоге: 9
24.05.2024, 16:40 4
Можно.
0
0 / 0 / 0
Регистрация: 14.04.2024
Сообщений: 25
24.05.2024, 16:58  [ТС] 5
Можете подсказать как это сделать?
0
512 / 337 / 145
Регистрация: 16.02.2021
Сообщений: 619
24.05.2024, 20:52 6
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import tkinter as tk
from tkinter import *
 
root = tk.Tk()
root.geometry("200x200")
 
def get_time():
    hour = spinbox.get()
    minute = spinbox2.get()
    lbl_time['text'] = f'Выбранное время: {hour}:{minute}'
    
spinbox = tk.Spinbox(root, values=[str(i).zfill(2) for i in range(24)],justify='right', width=3, font=("Arial", 12), fg="blue",state="readonly")
spinbox.place(x=10,y=10)
 
lbl = Label(root, text=":")
lbl.place(x=55,y=10)
 
spinbox2 = tk.Spinbox(root, values=[str(i).zfill(2) for i in range(60)],justify='right', width=3, font=("Arial", 12), fg="blue",state="readonly")
spinbox2.place(x=65,y=10)
 
btn = Button(root, text="Ок",command=get_time)
btn.place(x=120,y=7)
 
lbl_time = Label(root, text="")
lbl_time.place(x=5,y=40)
 
root.mainloop()
1
0 / 0 / 0
Регистрация: 14.04.2024
Сообщений: 25
25.05.2024, 02:34  [ТС] 7
Спасибо, такой вариант меня устраивает, только остался еще один вопрос.

У меня вне этой функции еще есть условие, которое будет зависеть от введенного времени, например я хочу получить из этой функции значение часа и использовать как переменную, поэтому я дописал функцию так:
Python
1
2
3
4
5
6
def get_time():
    hour = spinbox.get()
    minute = spinbox2.get()
    text_input.insert(END, f"Время выезда: {hour}:{minute}" + "\n")
    return hour
    return minute
В условии я, например, прописываю:
Python
1
if hour == 8 and minute > 30
Но проблема заключается в том, что ни hour ни minute не становятся активными, хотя return прописан.
Подскажите как это исправить.
0
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,786
Записей в блоге: 9
25.05.2024, 05:22 8
Python
1
    return (hour, minute)
0
0 / 0 / 0
Регистрация: 14.04.2024
Сообщений: 25
25.05.2024, 05:53  [ТС] 9
Не работает, все равно пишет что переменная не определена
0
512 / 337 / 145
Регистрация: 16.02.2021
Сообщений: 619
25.05.2024, 06:39 10
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import tkinter as tk
from tkinter import *
 
root = tk.Tk()
root.geometry("200x200")
 
class TimeVar():
    def __init__(self):
        self.selected_time = '00:00'
 
    def __str__(self):
        return self.selected_time
        
    def get_time(self):
        hour = spinbox.get()
        minute = spinbox2.get()
        self.selected_time = f'{hour}:{minute}'
        lbl_time['text'] = f'Выбранное время: {hour}:{minute}'
        return self.selected_time
 
selected_time = TimeVar()
 
spinbox = tk.Spinbox(root, values=[str(i).zfill(2) for i in range(24)],justify='right', width=3, font=("Arial", 12), fg="blue",state="readonly")
spinbox.place(x=10,y=10)
 
lbl = Label(root, text=":")
lbl.place(x=55,y=10)
 
spinbox2 = tk.Spinbox(root, values=[str(i).zfill(2) for i in range(60)],justify='right', width=3, font=("Arial", 12), fg="blue",state="readonly")
spinbox2.place(x=65,y=10)
 
lbl_time = Label(root, text="")
lbl_time.place(x=5,y=40)
 
btn = Button(root, text="Выбранное время",command=lambda:print(selected_time.get_time()))
btn.place(x=5,y=170)
 
root.mainloop()

selected_time.get_time() возвращает выбранное время
0
0 / 0 / 0
Регистрация: 14.04.2024
Сообщений: 25
25.05.2024, 09:24  [ТС] 11
Прошу прощения за глупые вопросы, я новичок в этом, но я правильно понимаю, что в данном случае selected_time будет принимать строковое значение?
0
512 / 337 / 145
Регистрация: 16.02.2021
Сообщений: 619
25.05.2024, 10:57 12
Цитата Сообщение от tysrusko Посмотреть сообщение
что в данном случае selected_time будет принимать строковое значение?
да, всё верно,
при желании можно вернуть любой тип
0
0 / 0 / 0
Регистрация: 14.04.2024
Сообщений: 25
25.05.2024, 15:33  [ТС] 13
Можете тогда подсказать, как конвертировать selected_time в формат даты, чтобы я его мог использовать например в следующем условии:
Python
1
if selected_time > datetime.time(12, 0, 0) and selected_time < datetime.time(14, 0, 0):
0
512 / 337 / 145
Регистрация: 16.02.2021
Сообщений: 619
25.05.2024, 21:14 14
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import tkinter as tk
from tkinter import *
import datetime
 
root = tk.Tk()
root.geometry("200x200")
 
class TimeVar():
    def __init__(self):
        self.selected_time = datetime.time(0, 0, 0)
 
    def __str__(self):
        return self.selected_time
        
    def get_time(self):
        self.selected_time = datetime.time(int(spinbox.get()), int(spinbox2.get()), 0)
        lbl_time['text'] = f'Выбранное время: {self.selected_time}'
        return self.selected_time
 
    def check_time(self):
        self.selected_time = datetime.time(int(spinbox.get()), int(spinbox2.get()), 0)
        if datetime.time(14, 0, 0) > self.selected_time > datetime.time(12, 0, 0):
            print(f'Выбранное время: {self.selected_time} в диапозоне 12:01 - 13:59')
        else:
            print(f'Выбранное время: {self.selected_time} вне диапозона 12:01 - 13:59')
             
selected_time = TimeVar()
 
spinbox = tk.Spinbox(root, values=[str(i).zfill(2) for i in range(24)],justify='right', width=3, font=("Arial", 12), fg="blue",state="readonly")
spinbox.place(x=10,y=10)
 
lbl = Label(root, text=":")
lbl.place(x=55,y=10)
 
spinbox2 = tk.Spinbox(root, values=[str(i).zfill(2) for i in range(60)],justify='right', width=3, font=("Arial", 12), fg="blue",state="readonly")
spinbox2.place(x=65,y=10)
 
lbl_time = Label(root, text="")
lbl_time.place(x=5,y=40)
 
btn = Button(root, text="Выбранное время",command=lambda:print(selected_time.get_time()))
btn.place(x=5,y=170)
 
btn2 = Button(root, text="Проверить",command=selected_time.check_time)
btn2.place(x=125,y=170)
 
root.mainloop()
0
0 / 0 / 0
Регистрация: 14.04.2024
Сообщений: 25
26.05.2024, 11:01  [ТС] 15
Я вас наверное уже заколебал со своими вопросами, но у меня есть еще один.

Вот сделан класс TimeVar в котором время формируется в некоторую переменную. Но условие, в котором должна применятся данная переменная находится вне этого класса в другой функции.

Допустим у меня есть функция, запускающая алгоритм дейкстры, в которой рассчитывается пройденное расстояние и делится на скорость. Условие мне нужно для того, чтобы в зависимости от введенной даты определять, сколько минут прибавлять к результату.

Собственно в чем вопрос, можно ли использовать этот selected_time в условии вне класса TimeVar, и если можно то как?
0
512 / 337 / 145
Регистрация: 16.02.2021
Сообщений: 619
26.05.2024, 14:16 16
Лучший ответ Сообщение было отмечено tysrusko как решение

Решение

Да можно, тогда check_time можно удалить. Метод get_time возвращает выбранное в spinbox'ах время.

Python
1
t = selected_time.get_time()
1
26.05.2024, 14:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2024, 14:16
Помогаю со студенческими работами здесь

Ввод и вывод с tkinter'om
Как сделать так, чтобы текст и строка для ввода текста отображались в окне tkinter'a?(я не совсем...

Сделать такой же рисунок с помощью tkinter
сделать такой же рисунок с помощью tkinter

Ввести и сохранить в файле данные следующей структуры. с использованием библиотеки tkinter
Ввести и сохранить в файле данные следующей структуры: место отдыха (не менее 5 мест), дата заезда,...

Как с помощью WINAPI организовать ввод IP-адреса в поле EDIT с помощью маски
Привет всем. Помогите пожалуйста. Как с помощью WINAPI организовать ввод в поле EDIT с помощью...

Как сделать ввод и вывод в tkinter, а не в консоль?
Такая проблема, ввод и вывод работает только через консоль, как сделать так, чтобы он работал в...

Tkinter+Matplotlib ввод функции в поле Entry
Доброго времени суток! Занимаюсь разработкой программы для построения графика функции с gui при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru