Как сделать часы на python
Перейти к содержимому

Как сделать часы на python

  • автор:

Как сделать часы, показывающие реальное время

Как реализовать работающие часы в PyQt5? Имеется ввиду, чтобы они показывали текущее время и шли дальше. Мой код снизу:

from datetime import datetime from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.Qt import * class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(649, 168) MainWindow.setMinimumSize(QtCore.QSize(0, 0)) MainWindow.setMaximumSize(QtCore.QSize(999999, 999999)) MainWindow.setStyleSheet("MainWindow\n""") self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setMaximumSize(QtCore.QSize(99999, 999999)) self.centralwidget.setStyleSheet("background-color: rgb(37, 37, 37)\n""") self.centralwidget.setObjectName("centralwidget") self.frame = QtWidgets.QFrame(self.centralwidget) self.frame.setGeometry(QtCore.QRect(0, -1, 641, 171)) self.frame.setMinimumSize(QtCore.QSize(0, 0)) self.frame.setMaximumSize(QtCore.QSize(99999, 999)) self.frame.setStyleSheet("MainWindow\n""") self.frame.setFrameShape(QtWidgets.QFrame.NoFrame) self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setObjectName("frame") self.tabWidget = QtWidgets.QTabWidget(self.frame) self.tabWidget.setGeometry(QtCore.QRect(0, 0, 651, 161)) self.tabWidget.setMinimumSize(QtCore.QSize(4, 0)) font = QtGui.QFont() font.setFamily("Rio Glamour personal use") font.setPointSize(14) self.tabWidget.setFont(font) self.tabWidget.setStyleSheet( "QTabWidget::pane\n""\n""\n""QTabBar::tab\n""\n""\n""\n""QTabBar::tab:selected\n""\n""\n""QTabBar::tab:hover\n""\n""\n""") self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() font = QtGui.QFont() font.setPointSize(8) self.tab.setFont(font) self.tab.setObjectName("tab") self.label = QtWidgets.QLabel(self.tab) self.label.setGeometry(QtCore.QRect(-4, -8, 651, 141)) self.label.setText("") self.label.setObjectName("label") self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.label_2 = QtWidgets.QLabel(self.tab_2) self.label_2.setGeometry(QtCore.QRect(0, 0, 661, 141)) self.label_2.setText("") self.label_2.setObjectName("label_2") # . +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv self.layout = QGridLayout(self.tab_2) # . +++ self.layout.addWidget(self.label_2, 0, 0, 1, 2) # . +++ # . +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ self.tabWidget.addTab(self.tab_2, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setStyleSheet("background-color: rgb(37, 37, 37);\n""color: rgb(255, 255, 255);") self.tab_3.setObjectName("tab_3") self.label_3 = QtWidgets.QLabel(self.tab_3) self.label_3.setGeometry(QtCore.QRect(10, 0, 661, 141)) self.label_3.setText("") self.label_3.setObjectName("label_3") self.tabWidget.addTab(self.tab_3, "") MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(2) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Time")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Stopwatch")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Timer")) class ManinWindow(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.tabWidget.currentChanged.connect(self.current_index) self.tabWidget.setCurrentIndex(0) def add_functions(self): # Часы self.label.setText(QDateTime.currentDateTime().toString('HH:mm:ss\ndd MM yyyy')) self.label.setFont(QtGui.QFont("Capsuula", 40)) self.label.setStyleSheet("color: #DADDFC;") self.label.setAlignment(Qt.AlignHCenter) # . +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv # Секундомер --- tab_2 self.temp = 0 self.label_2.setText("00:00:00") self.label_2.setAlignment(Qt.AlignHCenter) self.label_2.setFont(QtGui.QFont("Capsuula", 40)) self.label_2.setStyleSheet("color: #fff;") self.btn_start = QtWidgets.QPushButton("Start") self.btn_start.setStyleSheet("color: #fff; font-size: 15px; background-color: #555;") self.btn_start.clicked.connect(self.func_start) self.btn_continue = QtWidgets.QPushButton("Continue") self.btn_continue.setStyleSheet("color: #fff; font-size: 15px; background-color: #555;") self.btn_continue.clicked.connect(self.func_continue) self.btn_reset = QtWidgets.QPushButton("Reset") self.btn_reset.setStyleSheet("color: #fff; font-size: 15px; background-color: #555;") self.btn_reset.clicked.connect(self.func_reset) # layout = QGridLayout(self) # layout.addWidget(self.label_2, 0, 0, 1, 2) # . layout.addWidget(self.button_start, 1, 0, 1, 2) self.layout.addWidget(self.btn_start, 1, 0, 1, 2) # . layout.addWidget(self.button_continue, 2, 0, 1, 1) self.layout.addWidget(self.btn_continue, 2, 0, 1, 1) # . layout.addWidget(self.button_reset, 2, 1, 1, 1) self.layout.addWidget(self.btn_reset, 2, 1, 1, 1) self.btn_continue.hide() self.btn_reset.hide() self.timer = QtCore.QTimer() self.timer.setInterval(1000) # . self.timer.timeout.connect(self.displayTime) self.timer.timeout.connect(self.display_time) def func_start(self): if self.btn_start.text() == "Start": self.timer.start() self.btn_start.setText("Stop") else: self.timer.stop() self.btn_start.setText("Start") self.btn_start.hide() self.btn_continue.show() self.btn_reset.show() def func_reset(self): self.temp = 0 self.label_2.setText("00:00:00") self.btn_start.setText("Start") self.btn_start.show() self.btn_continue.hide() self.btn_reset.hide() def display_time(self): f_temp = datetime.utcfromtimestamp(self.temp).strftime("%H:%M:%S") # ------------------> . # self.label_2.setTetx(f_temp) self.label_2.setText(f_temp) self.temp += 1 # . +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv def current_index(self, index): if index == 0: self.add_functions() def func_continue(self): self.timer.start() self.btn_start.setText('Стоп') self.btn_start.show() self.btn_continue.hide() self.btn_reset.hide() # +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) w = ManinWindow() w.show() sys.exit(app.exec_()) 

Написать код надо между комментариями «#Часы» и «#Секундомер»

Отслеживать

75.3k 120 120 золотых знаков 38 38 серебряных знаков 57 57 бронзовых знаков

Цифровые часы с Python и Tkinter

Цифровые часы с Python и Tkinter

Здравствуйте! В сегодняшней статье мы рассмотрим, как создать цифровые часы при помощи Python и Tkinter. Также нам понадобится модуль time. Мы создадим окно, затем добавим к нему метку Lable, в которой будут отображаться цифровые знаки, обновляющиеся по логике часов. Так мы будем имитировать изменение времени. И так, приступим.

Создадим файл в Pycharm или любом другом редакторе и придадим ему расширение .py.

# Для начала импортируем все элементы из модуля

from tkinter import *

from tkinter.ttk import *

# импорт модуля для преобразования кортежей через format
from time import strftime

# создание экземпляра класса Tk(), для отображенния окна приложения
root = Tk()
# добавление заголовка к окну
root.title(‘Цифровые часы’)

# создание текстовой метки в окне прилржения, для отображения цифровых знаков. Цифры будут белыми на черном фоне
lable = Label(root, font=(‘aerial’, 30), background=’black’, foreground=’white’)

# функция отображения времени
def time():
string = strftime(‘%H:%M:%S %p’)
lable.config(text=string)
lable.after(1000, time)

# азмещение метки времени по центру
lable.pack(anchor=’center’)
time()

# запуск цикла программы
mainloop()

Если все сделано правильно, на экране отобразится текущее время с компьютера. Таким образом, мы создали цифровые часы с Python и графической библиотекой Tkinter.

Создано 27.10.2022 12:37:46

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.

    Как сделать часы на Python?

    TosterModerator

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

    Afafks @Afafks Автор вопроса
    Afafks @Afafks Автор вопроса

    TosterModerator

    Модератор @TosterModerator

    Afafks, не ок. Всё ещё не понятно с чем конкретно у вас проблема. Всё ещё невозможно дать конкретный и единственно верный ответ. Всё ещё очень похоже на задание, а не вопрос.

    Afafks @Afafks Автор вопроса
    Решения вопроса 2

    Antonchik

    Программирую на HTML

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

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
    вот этот код пойдет

    from turtle import * from datetime import datetime def jump(distanz, winkel=0): penup() right(winkel) forward(distanz) left(winkel) pendown() def hand(laenge, spitze): fd(laenge*1.15) rt(90) fd(spitze/2.0) lt(120) fd(spitze) lt(120) fd(spitze) lt(120) fd(spitze/2.0) def make_hand_shape(name, laenge, spitze): reset() jump(-laenge*0.15) begin_poly() hand(laenge, spitze) end_poly() hand_form = get_poly() register_shape(name, hand_form) def clockface(radius): reset() pensize(7) for i in range(60): jump(radius) if i % 5 == 0: fd(25) jump(-radius-25) else: dot(3) jump(-radius) rt(6) def setup(): global second_hand, minute_hand, hour_hand, writer mode("logo") make_hand_shape("second_hand", 125, 25) make_hand_shape("minute_hand", 130, 25) make_hand_shape("hour_hand", 90, 25) clockface(160) second_hand = Turtle() second_hand.shape("second_hand") second_hand.color("gray20", "gray80") minute_hand = Turtle() minute_hand.shape("minute_hand") minute_hand.color("blue1", "red1") hour_hand = Turtle() hour_hand.shape("hour_hand") hour_hand.color("blue3", "red3") for hand in second_hand, minute_hand, hour_hand: hand.resizemode("user") hand.shapesize(1, 1, 3) hand.speed(0) ht() writer = Turtle() writer.ht() writer.pu() writer.bk(85) def wochentag(t): wochentag = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] return wochentag[t.weekday()] def datum(z): monat = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June", "July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."] j = z.year m = monat[z.month - 1] t = z.day return "%s %d %d" % (m, t, j) def tick(): t = datetime.today() sekunde = t.second + t.microsecond*0.000001 minute = t.minute + sekunde/60.0 stunde = t.hour + minute/60.0 try: tracer(False) writer.clear() writer.home() writer.forward(65) writer.write(wochentag(t), align="center", font=("Courier", 14, "bold")) writer.back(150) writer.write(datum(t), align="center", font=("Courier", 14, "bold")) writer.forward(85) tracer(True) second_hand.setheading(6*sekunde) # or here minute_hand.setheading(6*minute) hour_hand.setheading(30*stunde) tracer(True) ontimer(tick, 100) except Terminator: pass def main(): tracer(False) setup() tracer(True) tick() return "EVENTLOOP" if __name__ == "__main__": mode("logo") msg = main() print(msg) mainloop()

    Ответ написан более трёх лет назад

    idegree

    Заверни в тэг code.
    Afafks @Afafks Автор вопроса
    нез, заработало?
    Afafks @Afafks Автор вопроса
    Max Amiri, Неа,но за библиотеки спс.
    после каждого функция должно быть абзац
    по этой причины не работает
    ато код правилный
    Afafks @Afafks Автор вопроса
    Max Amiri, Ай ну и ладно я уже turtle делаю.

    idegree

    Afafks, ты случаем не из под двух аккаунтов сидишь и сам себе отвечаешь? Иначе бы зачем тебе писать «спс», на коммент Max Amiri? Выглядит так, как будто перелогиниться забыл.

    Простые часы на tkinter

    f375a21a.png

    Tkinter – это кроссплатформенная библиотека для разработки графического интерфейса на языке Python (начиная с Python 3.0 переименована в tkinter). Tkinter расшифровывается как Tool kit interface, и является интерфейсом для языка програмирования Tcl и графической для него привязки tk.Не вдаваясь в подробности, Tkinter можно охарактеризовать как переводчик с языка Python на язык Tcl. Вы пишете программу на Python, а код модуля tkinter у вас за спиной переводит ваши инструкции на язык Tcl(тикль-токль), который понимает библиотека Tk (tool kit).

    Конечно для python есть и другие более мощные и интересные библиотеки графического интерфейса такие как: pygame и qiwi, qt и gtk.Однако pygame расчитан больше на разработку видео игр, qiwi лучше использовать для мобильных платформ , qt и gtk несколько сложнее в изучении и могут иметь много не нужного на первых этапах . А вот tkinter хорош для протипирования и быстрой разработки,а потому он идеально подходит для начинающих. В плюсы данной библиотеке можно записать её наличие в стандартном дистрибутиве python,в то время,как другие библиотеки для создания графического интерфейса требует отдельной установки через внутренний менеджер пакетов питона pip.

    Под графическим интерфейсом пользователя (GUI или graphical user interfase) подразумеваются все окна, кнопки, текстовые поля для ввода, скроллеры, списки, флаги. Через них пользователь взаимодействует с программой и управляет ею. Все эти элементы интерфейса называются виджетами (widgets).

    Приложения с графическим интерфейсом пользователя событийно-ориентированные. Вы,уважаемый читатель, уже должны иметь представление о структурном и желательно объектно-ориентированном программировании. Событийно-ориентированное ориентировано на события. То есть та или иная часть программного кода начинает выполняться лишь тогда, когда случается то или иное событие.Собственно наши часы и будут использовать эту парадигму.

    Событийно-ориентированное программирование базируется на объектно-ориентированном и структурном. Даже если мы не создаем собственных классов и объектов, то все-равно ими пользуемся. Все виджеты – объекты, порожденные встроенными классами.

    События бывают разными. Сработал временной фактор, кто-то кликнул мышкой или нажал Enter, начал вводить текст, переключил радиокнопки, прокрутил страницу и т. д. Когда случается что-то подобное, то, если был создан соответствующий обработчик, происходит срабатывание определенной части программы(trigger), что приводит к какому-либо результату. Например в наших часах как только сменяется системное время,сразу обновляется счётчик. Вот вам и наглядный пример событийно-ориентированого програмирования.

    Далее, чтобы написать GUI-программу, надо в своей программе следовать следуещему плану:

    1) Создать главное окно. 2)Создать виджеты и выполнить конфигурацию их свойств (опций). 3)Определить события, то есть то, на что будет реагировать программа. 2)Определить обработчики событий, то есть то, как будет реагировать программа. 4)Расположить виджеты в главном окне. 5)Запустить цикл обработки событий. 

    Последовательность не обязательно такая, но первый и последний пункты всегда остаются на своих местах. Достаточно следовать этому плану и всё получится!

    В качестве учебного проекта можно написать свою реализацию стандартного ПО. Для примера я написал простые часы. Простые и без наворотов. Но при желании всегда можно расширить функционал. Благо софт находится под свободной лицензией GNU GPL v2. Исходный код программы лежит на Github. Вы можете спокойно почитать исходный код программы , сделать code-review, внести правки или вовсе создать ответвление(fork).

    Для начала импортируем необходимые для работы программы модули , а именно time(отвечает за операции связанные со времинем и манипуляциями над ним) и собственно tkinter:

     from tkinter import * import time 

    Следующая часть кода отвечает за отображение заголовка,шрифт,цвет текста

     root = Tk() root.title("tkClock") time1 = '' clock = Label(root, font=('bold', 20, 'bold'), bg='white') clock.pack(fill=BOTH, expand=1) 

    Далее мы создаем функцию ,которая при помощи time.strftime узнает текущее системное время. Далее оно передаётся в тело программы. Сразу как только системное время изменяется,происходит обновление фрейма. При этом проверка времени происходит каждые 200 милисекунд,что позволяет поддерживать баланс между производительностью и точностью:

     def tick(): global time1 # узнаем время time2 = time.strftime('%H:%M:%S') # фрейм обновляется как только время меняется if time2 != time1: time1 = time2 clock.config(text=time2) # вызовы идут каждые 200 милисекунд clock.after(200, tick) 

    Последние строчки закрывают цикл “clock” и позволяют закрыть окно,если того пожелает пользователь:

     tick() root.mainloop() 

    Программа вышла очень простой , однако никто не мешает доработать её или вообще переписать полностью. Благо open source.

    Вот и всё. Tkinter – это, безусловно, мощная и удобная библиотека.

    Хочешь помочь проекту? Просто оставь комментарий или поделись этой статьёй с друзьями.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *