Skip to content
This repository was archived by the owner on Apr 1, 2026. It is now read-only.

Commit c08e572

Browse files
add a new table view for general use, can be easily edited, selectively or completely saved and opened in notepad
1 parent e7c5fb5 commit c08e572

4 files changed

Lines changed: 227 additions & 2 deletions

File tree

PythonGUI_apps/DataBrowser.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from PLQE_analysis import plqe_analysis
2020
from H5_Pkl import h5_pkl_view, h5_view_and_plot
2121
from Image_analysis import Image_analysis
22+
from Table import Table_widget
2223
pg.mkQApp()
2324
#pg.setConfigOption('background', 'w')
2425

@@ -38,7 +39,7 @@ def __init__(self):
3839
self.ui = WindowTemplate()
3940
self.ui.setupUi(self)
4041
self.ui.select_comboBox.addItems(["Lifetime Analysis", "Spectrum Analysis", "FLIM Analysis",
41-
"UV-Vis Analysis", "PLQE Analysis", "H5 View/Plot", "H5/PKL Viewer", "Image Analysis"])
42+
"UV-Vis Analysis", "PLQE Analysis", "H5 View/Plot", "H5/PKL Viewer", "Image Analysis", "Table View"])
4243
self.ui.load_pushButton.clicked.connect(self.load_app)
4344

4445
self.show()
@@ -72,7 +73,9 @@ def load_app(self):
7273
elif analysis_software == "Image Analysis":
7374
self.image_window = Image_analysis.MainWindow()
7475
self.image_window.show()
75-
76+
elif analysis_software == "Table View":
77+
self.table_widget = Table_widget.MainWindow()
78+
self.table_widget.show()
7679

7780

7881
def run():
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
Created on Mon Sep 2 17:04:49 2019
4+
5+
@author: Sarthak
6+
"""
7+
8+
from pathlib import Path
9+
import pyqtgraph as pg
10+
from pyqtgraph.python2_3 import asUnicode
11+
from pyqtgraph.Qt import QtCore, QtGui
12+
13+
14+
pg.mkQApp()
15+
pg.setConfigOption('background', 'w')
16+
17+
18+
base_path = Path(__file__).parent
19+
file_path = (base_path / "Table_widget_gui.ui").resolve()
20+
21+
uiFile = file_path
22+
23+
WindowTemplate, TemplateBaseClass = pg.Qt.loadUiType(uiFile)
24+
25+
class MainWindow(TemplateBaseClass):
26+
27+
def __init__(self):
28+
super(TemplateBaseClass, self).__init__()
29+
30+
# Create the main window
31+
self.ui = WindowTemplate()
32+
self.ui.setupUi(self)
33+
34+
self.clear()
35+
36+
self.ui.clear_pushButton.clicked.connect(self.clear)
37+
self.ui.add_row_pushButton.clicked.connect(self.add_row)
38+
self.ui.add_column_pushButton.clicked.connect(self.add_column)
39+
40+
"""Saving and Copying --- implemented from pyqtgraph TableWidget"""
41+
self.contextMenu = QtGui.QMenu()
42+
self.contextMenu.addAction('Copy Selection').triggered.connect(self.copySel)
43+
self.contextMenu.addAction('Copy All').triggered.connect(self.copyAll)
44+
self.contextMenu.addAction('Save Selection').triggered.connect(self.saveSel)
45+
self.contextMenu.addAction('Save All').triggered.connect(self.saveAll)
46+
47+
self.show()
48+
49+
def clear(self):
50+
self.ui.tableWidget.clear()
51+
self.verticalHeadersSet = False
52+
self.horizontalHeadersSet = False
53+
54+
def add_row(self):
55+
row_position = self.ui.tableWidget.rowCount()
56+
self.ui.tableWidget.insertRow(row_position)
57+
58+
def add_column(self):
59+
column_position = self.ui.tableWidget.columnCount()
60+
self.ui.tableWidget.insertColumn(column_position)
61+
62+
def save_table(self):# Needs to be implemented
63+
print(self.ui.tableWidget.currentItem().text())
64+
65+
def serialize(self, useSelection=False):
66+
"""Convert entire table (or just selected area) into tab-separated text values"""
67+
if useSelection:
68+
selection = self.ui.tableWidget.selectedRanges()[0]
69+
rows = list(range(selection.topRow(),
70+
selection.bottomRow() + 1))
71+
columns = list(range(selection.leftColumn(),
72+
selection.rightColumn() + 1))
73+
else:
74+
rows = list(range(self.ui.tableWidget.rowCount()))
75+
columns = list(range(self.ui.tableWidget.columnCount()))
76+
77+
data = []
78+
if self.horizontalHeadersSet:
79+
row = []
80+
if self.verticalHeadersSet:
81+
row.append(asUnicode(''))
82+
83+
for c in columns:
84+
row.append(asUnicode(self.ui.tableWidget.horizontalHeaderItem(c).text()))
85+
data.append(row)
86+
87+
for r in rows:
88+
row = []
89+
if self.verticalHeadersSet:
90+
row.append(asUnicode(self.ui.tableWidget.verticalHeaderItem(r).text()))
91+
for c in columns:
92+
item = self.ui.tableWidget.item(r, c)
93+
if item is not None:
94+
row.append(asUnicode(item.text()))
95+
else:
96+
row.append(asUnicode(''))
97+
data.append(row)
98+
99+
s = ''
100+
for row in data:
101+
s += ('\t'.join(row) + '\n')
102+
return s
103+
104+
105+
def copySel(self):
106+
"""Copy selected data to clipboard."""
107+
QtGui.QApplication.clipboard().setText(self.serialize(useSelection=True))
108+
109+
def copyAll(self):
110+
"""Copy all data to clipboard."""
111+
QtGui.QApplication.clipboard().setText(self.serialize(useSelection=False))
112+
113+
114+
def saveSel(self):
115+
"""Save selected data to file."""
116+
self.save(self.serialize(useSelection=True))
117+
118+
119+
def saveAll(self):
120+
"""Save all data to file."""
121+
self.save(self.serialize(useSelection=False))
122+
123+
124+
def save(self, data):
125+
fileName = QtGui.QFileDialog.getSaveFileName(self, "Save As..", "", "Tab-separated values (*.tsv)")
126+
if fileName == '':
127+
return
128+
open(fileName[0], 'w').write(data)
129+
130+
def contextMenuEvent(self, ev):
131+
self.contextMenu.popup(ev.globalPos())
132+
133+
def keyPressEvent(self, ev):
134+
if ev.key() == QtCore.Qt.Key_C and ev.modifiers() == QtCore.Qt.ControlModifier:
135+
ev.accept()
136+
self.copySel()
137+
# else:
138+
# QtGui.QTableWidget.keyPressEvent(self, ev)
139+
"""Run the Main Window"""
140+
def run():
141+
win = MainWindow()
142+
QtGui.QApplication.instance().exec_()
143+
return win
144+
145+
run()
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>Form</class>
4+
<widget class="QWidget" name="Form">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>658</width>
10+
<height>438</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>TableWidget</string>
15+
</property>
16+
<layout class="QGridLayout" name="gridLayout">
17+
<item row="1" column="0">
18+
<widget class="QPushButton" name="add_row_pushButton">
19+
<property name="text">
20+
<string>Add Row</string>
21+
</property>
22+
</widget>
23+
</item>
24+
<item row="1" column="1">
25+
<widget class="QPushButton" name="add_column_pushButton">
26+
<property name="text">
27+
<string>Add Column</string>
28+
</property>
29+
</widget>
30+
</item>
31+
<item row="1" column="2">
32+
<widget class="QPushButton" name="clear_pushButton">
33+
<property name="text">
34+
<string>Clear</string>
35+
</property>
36+
</widget>
37+
</item>
38+
<item row="0" column="0" colspan="3">
39+
<widget class="QTableWidget" name="tableWidget">
40+
<property name="rowCount">
41+
<number>12</number>
42+
</property>
43+
<property name="columnCount">
44+
<number>6</number>
45+
</property>
46+
<row/>
47+
<row/>
48+
<row/>
49+
<row/>
50+
<row/>
51+
<row/>
52+
<row/>
53+
<row/>
54+
<row/>
55+
<row/>
56+
<row/>
57+
<row/>
58+
<column/>
59+
<column/>
60+
<column/>
61+
<column/>
62+
<column/>
63+
<column/>
64+
</widget>
65+
</item>
66+
</layout>
67+
</widget>
68+
<resources/>
69+
<connections/>
70+
</ui>

PythonGUI_apps/Table/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
Created on Mon Sep 2 17:52:35 2019
4+
5+
@author: Sarthak
6+
"""
7+

0 commit comments

Comments
 (0)