Удалить oop-exam/date_average.py
This commit is contained in:
parent
c3a1d25ffc
commit
4caa051a4f
1 changed files with 0 additions and 95 deletions
|
|
@ -1,95 +0,0 @@
|
||||||
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())
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue