Добавить oop-exam/date_average.py

This commit is contained in:
helldh 2025-12-24 11:02:05 +03:00
parent 91c8cad074
commit a6c27529b0

95
oop-exam/date_average.py Normal file
View file

@ -0,0 +1,95 @@
from PyQt6.QtWidgets import (
QApplication, QWidget, QVBoxLayout, QHBoxLayout, QListWidget,
QPushButton, QLabel, QDateEdit, QListWidgetItem
)
from PyQt6.QtCore import QDate
import sys
class AverageDateCalculator(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Среднее значение дат")
self.resize(400, 300)
self.layout = QVBoxLayout()
self.setLayout(self.layout)
# Список дат
self.list_widget = QListWidget()
self.list_widget.setSelectionMode(QListWidget.SelectionMode.ExtendedSelection)
self.layout.addWidget(self.list_widget)
# Кнопки для добавления/удаления
btn_layout = QHBoxLayout()
self.add_btn = QPushButton("Добавить сегодня")
self.remove_btn = QPushButton("Удалить выбранные")
btn_layout.addWidget(self.add_btn)
btn_layout.addWidget(self.remove_btn)
self.layout.addLayout(btn_layout)
# Диапазон дат
range_layout = QHBoxLayout()
self.start_date = QDateEdit()
self.end_date = QDateEdit()
self.start_date.setCalendarPopup(True)
self.end_date.setCalendarPopup(True)
self.start_date.setDate(QDate.currentDate())
self.end_date.setDate(QDate.currentDate())
range_layout.addWidget(QLabel("С:"))
range_layout.addWidget(self.start_date)
range_layout.addWidget(QLabel("По:"))
range_layout.addWidget(self.end_date)
self.layout.addLayout(range_layout)
# Вывод среднего
self.result_label = QLabel("Среднее: —")
self.layout.addWidget(self.result_label)
# Сигналы
self.add_btn.clicked.connect(self.add_today)
self.remove_btn.clicked.connect(self.remove_selected)
self.list_widget.itemSelectionChanged.connect(self.compute_average)
self.start_date.dateChanged.connect(self.compute_average)
self.end_date.dateChanged.connect(self.compute_average)
def add_today(self):
today = QDate.currentDate()
item = QListWidgetItem(today.toString("yyyy-MM-dd"))
self.list_widget.addItem(item)
self.compute_average()
def remove_selected(self):
for item in self.list_widget.selectedItems():
self.list_widget.takeItem(self.list_widget.row(item))
self.compute_average()
def compute_average(self):
# Собираем даты
selected_items = self.list_widget.selectedItems()
if selected_items:
dates = [QDate.fromString(item.text(), "yyyy-MM-dd") for item in selected_items]
else:
# Если ничего не выделено, берем все элементы в диапазоне
start = self.start_date.date()
end = self.end_date.date()
dates = []
for i in range(self.list_widget.count()):
date = QDate.fromString(self.list_widget.item(i).text(), "yyyy-MM-dd")
if start <= date <= end:
dates.append(date)
if not dates:
self.result_label.setText("Среднее: —")
return
# Вычисляем среднее
days_sum = sum([date.toJulianDay() for date in dates])
avg_day = days_sum // len(dates)
avg_date = QDate.fromJulianDay(avg_day)
self.result_label.setText(f"Среднее: {avg_date.toString('yyyy-MM-dd')}")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = AverageDateCalculator()
window.show()
sys.exit(app.exec())