-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtableWidget.py
More file actions
120 lines (96 loc) · 4.37 KB
/
tableWidget.py
File metadata and controls
120 lines (96 loc) · 4.37 KB
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLineEdit, QPushButton,QFileDialog,QTableWidget,QTableWidgetItem
from PyQt6.QtGui import QAction,QPainter,QPageSize
from PyQt6.QtCore import Qt,pyqtSignal
from layoutWidget import LayoutWidget
import csv
class TableWidget(QWidget):
selectedDataUpdate = pyqtSignal(list)
dataUpdate = pyqtSignal(list)
def __init__(self,parent=None):
super().__init__(parent)
self.filename=""
layout = QVBoxLayout()
self.tabWidget = QTableWidget(self)
self.tabWidget.setColumnCount(2)
self.tabWidget.setRowCount(3)
self.tabWidget.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)
self.tabWidget.setSelectionMode(QTableWidget.SelectionMode.SingleSelection)
self.tabWidget.itemSelectionChanged.connect(self.onRowSelect)
self.tabWidget.cellChanged.connect(self.onRowSelect)
self.tabWidget.cellChanged.connect(self.onDataChange)
layout.addWidget(self.tabWidget)
#layout.addStretch(1)
buttonLine1 = QHBoxLayout()
addRowButton = QPushButton("Add Row", self)
buttonLine1.addWidget(addRowButton)
addRowButton.clicked.connect(lambda: self.tabWidget.insertRow(self.tabWidget.rowCount()))
addColButton = QPushButton("Add Column", self)
buttonLine1.addWidget(addColButton)
addColButton.clicked.connect(lambda: self.tabWidget.insertColumn(self.tabWidget.columnCount()))
layout.addLayout(buttonLine1)
buttonLine = QHBoxLayout()
openButton = QPushButton("Import", self)
buttonLine.addWidget(openButton)
openButton.clicked.connect(self.importTable)
saveButton = QPushButton("Export", self)
buttonLine.addWidget(saveButton)
saveButton.clicked.connect(self.exportTable)
layout.addLayout(buttonLine)
self.setLayout(layout)
def importTable(self):
filename = QFileDialog.getOpenFileName(self, "Open Table File", "", "Table Files (*.csv);;All Files (*)")
if not filename[0]:
print("No file selected")
return
with open(filename[0], 'r',encoding="utf-8") as file:
data = file.read()
reader = csv.reader(data.splitlines(), delimiter=';')
self.tabWidget.setRowCount(0)
self.tabWidget.setColumnCount(0)
for i, row in enumerate(reader):
self.tabWidget.insertRow(i)
for j, value in enumerate(row):
if j >= self.tabWidget.columnCount():
self.tabWidget.insertColumn(j)
self.tabWidget.setItem(i, j, QTableWidgetItem(value))
def exportTable(self):
filename = QFileDialog.getSaveFileName(self, "Save Table File", "", "Table Files (*.csv);;All Files (*)")
if not filename[0]:
print("No file selected")
return
with open(filename[0], 'w') as file:
writer = csv.writer(file,delimiter=';')
for i in range(self.tabWidget.rowCount()):
row = []
for j in range(self.tabWidget.columnCount()):
item = self.tabWidget.item(i, j)
if item is not None:
row.append(item.text())
else:
row.append("")
writer.writerow(row)
def onRowSelect(self):
selected_items = self.tabWidget.selectedItems()
if selected_items:
row = selected_items[0].row()
data=[]
for i in range(self.tabWidget.columnCount()):
item = self.tabWidget.item(row, i)
if item is not None:
data.append(item.text())
else:
data.append("")
self.selectedDataUpdate.emit(data)
def onDataChange(self):
data=[]
for row in range(self.tabWidget.rowCount()):
row_data=[]
for i in range(self.tabWidget.columnCount()):
item = self.tabWidget.item(row, i)
if item is not None:
row_data.append(item.text())
else:
row_data.append("")
data.append(row_data)
self.dataUpdate.emit(data)