add main file

This commit is contained in:
WorldTeacher
2024-06-03 12:27:37 +02:00
parent f5499d53e8
commit 351270f01d

179
application.py Normal file
View File

@@ -0,0 +1,179 @@
import ast
import sys
from PyQt6 import QtWidgets
from src.transform import Transform
from src.ui.graph import Graph
from src.ui.Ui_diagram import Ui_MainWindow as MainWindow
class Application(QtWidgets.QMainWindow, MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# set Name to Diagram
self.setWindowTitle("Zeitschriftennutzung")
self.start_date.setEnabled(False)
self.end_Date.setEnabled(False)
self.load_data.clicked.connect(self.load_data_clicked)
self.creatediagram.clicked.connect(self.create_diagram)
self.removeLastGraph.clicked.connect(self.remove_last_graph)
# if cursor drags something to data_source, add path to data_source
self.data_source.setAcceptDrops(True)
self.data_source.dropEvent = self.dropEvent
self.data_source.dragEnterEvent = self.dragEnterEvent
self.widgetCount = 2
if self.widgetCount == 2:
self.removeLastGraph.setEnabled(False)
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
for url in event.mimeData().urls():
if url.isLocalFile():
if url.toLocalFile().endswith(".json"):
self.data_source.setText(url.toLocalFile())
else:
# Show error message in dialog
msg = QtWidgets.QMessageBox()
msg.setIcon(QtWidgets.QMessageBox.Icon.Warning)
msg.setText("Only JSON files are supported")
msg.setWindowTitle("Error")
msg.exec()
event.accept()
def load_data_clicked(self):
print("Load data clicked")
source = self.data_source.text()
if source == "":
# Show error message in dialog
msg = QtWidgets.QMessageBox()
msg.setIcon(QtWidgets.QMessageBox.Icon.Warning)
msg.setText("Data source is empty")
msg.setWindowTitle("Error")
msg.exec()
else:
print("Data source:", source)
if self.useSensorTimeData.isChecked():
data = (
Transform(source)
.load_data()
.transform_data(addMissing=self.addMissingDays.isChecked())
)
else:
start_date = self.start_date.text().replace(".", "-")
end_date = self.end_Date.text().replace(".", "-")
print("Start date:", start_date, type(start_date))
data = (
Transform(source)
.load_data()
.transform_data(
addMissing=self.addMissingDays.isChecked(),
start_date=start_date,
end_date=end_date,
split=True,
)
)
print("Data:", data)
# add data to table
self.dataTable.setRowCount(0)
self.insertIntoTable(data)
def insertIntoTable(self, data):
for sensor in data:
self.dataTable.insertRow(self.dataTable.rowCount())
self.dataTable.setItem(
self.dataTable.rowCount() - 1, 0, QtWidgets.QTableWidgetItem(sensor)
)
self.dataTable.setItem(
self.dataTable.rowCount() - 1,
2,
QtWidgets.QTableWidgetItem(str((data[sensor]))),
)
def create_diagram(self):
selectedRowCount = len(self.dataTable.selectionModel().selectedRows())
if selectedRowCount == 0:
# Show error message in dialog
msg = QtWidgets.QMessageBox()
msg.setIcon(QtWidgets.QMessageBox.Icon.Warning)
msg.setText("No sensor selected")
msg.setWindowTitle("Error")
msg.exec()
else:
if selectedRowCount == 1:
# get selected sensor
sensor = self.dataTable.item(self.dataTable.currentRow(), 0).text()
try:
alias = self.dataTable.item(self.dataTable.currentRow(), 1).text()
except AttributeError:
alias = None
data = self.dataTable.item(self.dataTable.currentRow(), 2).text()
# convert data to dict
data = ast.literal_eval(data)
graph_data = {
alias if alias else sensor: {"x": data["x"], "y": data["y"]}
}
else:
graph_data = []
for row in range(selectedRowCount):
sensor = self.dataTable.item(
self.dataTable.selectionModel().selectedRows()[row].row(), 0
).text()
try:
alias = self.dataTable.item(
self.dataTable.selectionModel().selectedRows()[row].row(), 1
).text()
except AttributeError:
alias = None
data = self.dataTable.item(
self.dataTable.selectionModel().selectedRows()[row].row(), 2
).text()
# convert data to dict
data = ast.literal_eval(data)
row_data = {
alias if alias else sensor: {"x": data["x"], "y": data["y"]}
}
graph_data.append(row_data)
graph = Graph(graph_data)
self.centralWidget().layout().addWidget(graph.graph)
self.widgetCount += 1
self.check_widget_count()
# set heigth of frame / data table to be 150
def check_widget_count(self):
if self.widgetCount > 2:
self.removeLastGraph.setEnabled(True)
else:
self.removeLastGraph.setEnabled(False)
def remove_last_graph(self):
print("Remove last graph")
# remove last graph
persistentItems = 2
Item_count = self.centralWidget().layout().count()
print(Item_count)
if Item_count > persistentItems:
self.centralWidget().layout().removeWidget(
self.centralWidget().layout().itemAt(Item_count - 1).widget()
)
self.widgetCount -= 1
self.check_widget_count()
# self.dataTable.setMaximumHeight(300)
def launch():
app = QtWidgets.QApplication(sys.argv)
window = Application()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
launch()