From 56b7bbf2d5de88875625eb02df53c0eca66732d4 Mon Sep 17 00:00:00 2001 From: destinyk <destiny.kuehn@student.nmt.edu> Date: Mon, 4 Dec 2023 12:48:41 -0700 Subject: [PATCH] change QTextEdit to QTreeWidget --- ckMseed/ckMseed.py | 392 +++++++++++++++++++++++---------------------- 1 file changed, 199 insertions(+), 193 deletions(-) diff --git a/ckMseed/ckMseed.py b/ckMseed/ckMseed.py index 17a714a..635b45d 100644 --- a/ckMseed/ckMseed.py +++ b/ckMseed/ckMseed.py @@ -45,8 +45,8 @@ from PySide2.QtWidgets import (QApplication, QWidget, QTabWidget, QCheckBox, QPushButton, QLineEdit, QLabel, QRadioButton, QTextEdit, QComboBox, QFileDialog, QMessageBox, - QProgressDialog) -# QTreeWidget, QTreeWidgetItem + QProgressDialog, QTreeWidget, + QTreeWidgetItem) from PySide2.QtCore import (Qt, QObject, QThread, Signal, QEventLoop, QTimer) @@ -210,14 +210,14 @@ class MainWindow(QWidget): self.radio_box = QGroupBox() self.radio_box.setCheckable(False) - self.scantext_box = QGroupBox() - self.scantext_box.setCheckable(False) + self.scan_box = QGroupBox() + self.scan_box.setCheckable(False) # layouts for groupboxes hbox_datadir = QHBoxLayout(self.datadir_box) hbox_stations = QHBoxLayout(self.stations_box) hbox_rbuttons = QHBoxLayout(self.radio_box) - vbox_scantext = QVBoxLayout(self.scantext_box) + vbox_scantext = QVBoxLayout(self.scan_box) # data dir widgets self.dd_label = QLabel("Data Directories:") @@ -288,22 +288,36 @@ class MainWindow(QWidget): # scan text widgets # Stat:Chan:Loc:Net:Sps Found label - self.scantext_label = QLabel("Stat:Chan:Loc:Net:Sps Found") - self.scantext_label.setAlignment(Qt.AlignCenter) + self.scan_tree_label = QLabel("Stat:Chan:Loc:Net:Sps Found") + self.scan_tree_label.setAlignment(Qt.AlignCenter) # Stat:Chan:Loc:Net:Sps Found text box - self.scantext = QTextEdit() - self.scantext.setAcceptRichText(False) + self.scan_tree = QTreeWidget() + self.scan_tree.setRootIsDecorated(False) + self.scan_tree.setColumnCount(5) + self.scan_tree.setColumnWidth(0, 150) + self.scan_tree.setColumnWidth(3, 150) + + # tree column labels + scan_header = QTreeWidgetItem() + scan_header.setText(0, 'Stat:Chan:Loc:Net:Sps') + scan_header.setText(1, 'Big') + scan_header.setText(2, 'Little') + scan_header.setText(3, 'Start Time') + scan_header.setText(4, 'End Time') + for i in range(5): + scan_header.setBackgroundColor(i, Qt.yellow) + self.scan_tree.setHeaderItem(scan_header) # add widgets to layout - vbox_scantext.addWidget(self.scantext_label) - vbox_scantext.addWidget(self.scantext) + vbox_scantext.addWidget(self.scan_tree_label) + vbox_scantext.addWidget(self.scan_tree) # add groupboxes to tab layout self.scan_layout.addWidget(self.datadir_box) self.scan_layout.addWidget(self.stations_box) self.scan_layout.addWidget(self.radio_box) - self.scan_layout.addWidget(self.scantext_box) + self.scan_layout.addWidget(self.scan_box) def build_other_tabs(self): """ @@ -336,15 +350,29 @@ class MainWindow(QWidget): self.big_e_dropmenu = QComboBox() self.big_e_dropmenu.activated.connect(self.big_e_dropmenu_selections) - self.big_e_text = QTextEdit() - self.big_e_text.setAcceptRichText(False) + self.big_e_tree = QTreeWidget() + self.big_e_tree.setColumnCount(5) + self.big_e_tree.setColumnWidth(1, 160) + self.big_e_tree.setColumnWidth(2, 150) + self.big_e_tree.setColumnWidth(3, 150) + + # tree column labels + big_e_header = QTreeWidgetItem() + big_e_header.setText(0, '') + big_e_header.setText(1, 'Trace Name') + big_e_header.setText(2, 'Start Time') + big_e_header.setText(3, 'End Time') + big_e_header.setText(4, 'Blockettes') + for i in range(5): + big_e_header.setBackgroundColor(i, Qt.yellow) + self.big_e_tree.setHeaderItem(big_e_header) self.big_traces_layout.addWidget(self.display_traces_matching) self.big_traces_layout.addWidget(self.big_e_dropmenu) self.big_traces_layout.setAlignment(Qt.AlignCenter) self.big_endian_layout.addLayout(self.big_traces_layout) - self.big_endian_layout.addWidget(self.big_e_text) + self.big_endian_layout.addWidget(self.big_e_tree) def build_little_endian(self): """ @@ -362,16 +390,30 @@ class MainWindow(QWidget): self.little_e_dropmenu = QComboBox() self.little_e_dropmenu.activated.connect(self.little_e_dropmenu_selections) - # Little Endian Textbox - self.little_e_text = QTextEdit() - self.little_e_text.setAcceptRichText(False) + # Little Endian tree + self.little_e_tree = QTreeWidget() + self.little_e_tree.setColumnCount(5) + self.little_e_tree.setColumnWidth(1, 160) + self.little_e_tree.setColumnWidth(2, 150) + self.little_e_tree.setColumnWidth(3, 150) + + # tree column labels + little_e_header = QTreeWidgetItem() + little_e_header.setText(0, '') + little_e_header.setText(1, 'Trace Name') + little_e_header.setText(2, 'Start Time') + little_e_header.setText(3, 'End Time') + little_e_header.setText(4, 'Blockettes') + for i in range(5): + little_e_header.setBackgroundColor(i, Qt.yellow) + self.little_e_tree.setHeaderItem(little_e_header) self.little_traces_layout.addWidget(self.display_traces_matching2) self.little_traces_layout.addWidget(self.little_e_dropmenu) self.little_traces_layout.setAlignment(Qt.AlignCenter) self.little_endian_layout.addLayout(self.little_traces_layout) - self.little_endian_layout.addWidget(self.little_e_text) + self.little_endian_layout.addWidget(self.little_e_tree) def build_errors(self): """ @@ -426,12 +468,12 @@ class MainWindow(QWidget): self.error_rbtns_layout.addWidget(self.non_u_rbtn) self.error_rbtns_layout.addStretch(1) - # Errors Textbox - self.error_text = QTextEdit() - self.error_text.setAcceptRichText(False) + # Errors tree + self.error_tree = QTreeWidget() + self.error_tree.setRootIsDecorated(False) self.errors_layout.addWidget(self.error_rbtns_box) - self.errors_layout.addWidget(self.error_text) + self.errors_layout.addWidget(self.error_tree) def data_init(self, batchfile, dataloc, runflag): """ @@ -469,7 +511,7 @@ class MainWindow(QWidget): # Dictionaries self.big_endian_dict = {} - self.big_little_dict = {} + self.little_endian_dict = {} self.error_dict = {} self.stat_chan_loc_dict = {} @@ -675,10 +717,10 @@ class MainWindow(QWidget): self.num_errors = 0 # Text fields - self.scantext.clear() - self.big_e_text.clear() - self.little_e_text.clear() - self.error_text.clear() + self.scan_tree.clear() + self.big_e_tree.clear() + self.little_e_tree.clear() + self.error_tree.clear() self.big_e_dropmenu.clear() self.little_e_dropmenu.clear() @@ -695,7 +737,7 @@ class MainWindow(QWidget): # Dicts self.big_endian_dict.clear() - self.big_little_dict.clear() + self.little_endian_dict.clear() self.error_dict.clear() self.stat_chan_loc_dict.clear() @@ -721,7 +763,8 @@ class MainWindow(QWidget): """ txt = words + str(cnt) - self.scantext.append(txt) + print(txt) + # self.scantext.append(txt) def write_error(self, info, error_type="", color="black"): """ @@ -732,7 +775,7 @@ class MainWindow(QWidget): if info: print(info) else: - info = info + "\n" + # info = info + "\n" self.error_all.append((info, color)) if error_type == "Read/Write": @@ -961,7 +1004,7 @@ class MainWindow(QWidget): directory, filelist) elif msfile.byteorder == "little": self.num_little_files = self.num_little_files + 1 - self.add_to_dict(self.big_little_dict, fileid, + self.add_to_dict(self.little_endian_dict, fileid, directory, filelist) msfile.close() except Exception as e: @@ -988,7 +1031,7 @@ class MainWindow(QWidget): self.little_e_dropmenu.insertItem(0, "All") self.little_e_dropmenu.setCurrentIndex(0) - for indexkey in list(self.big_little_dict): + for indexkey in list(self.little_endian_dict): self.little_e_dropmenu.addItem(indexkey) def write_scan(self): @@ -996,15 +1039,9 @@ class MainWindow(QWidget): Add data found in file scan to Scan tab """ - yellow = Qt.yellow white = Qt.white light_blue = Qt.cyan - scan_header = ("Stat:Chan:Loc:Net:Sps \t Big \t Little \t Start Time \t\t End Time") - self.scantext.setTextBackgroundColor(yellow) - self.scantext.setText(scan_header) - self.scantext.setTextBackgroundColor(white) - if not self.stat_chan_loc_dict: return @@ -1015,18 +1052,22 @@ class MainWindow(QWidget): if keylist: c = 0 for key in keylist: + scan_info = [] + scan_info.append(key) num_big = 0 num_little = 0 if key in self.big_endian_dict: for _dir in list(self.big_endian_dict[key].keys()): num_big = num_big + len(self.big_endian_dict[key][_dir]) - if key in self.big_little_dict: - for _dir in list(self.big_little_dict[key].keys()): + if key in self.little_endian_dict: + for _dir in list(self.little_endian_dict[key].keys()): num_little = num_little + \ - len(self.big_little_dict[key][_dir]) + len(self.little_endian_dict[key][_dir]) + scan_info.append(num_big) + scan_info.append(num_little) - text = key + "\t" + str(num_big) + "\t" + str(num_little) + # text = key + "\t" + str(num_big) + "\t" + str(num_little) if not self.scan_type: pass @@ -1035,17 +1076,39 @@ class MainWindow(QWidget): self.stat_chan_loc_dict[key][0][0])) end = time.strftime('%Y:%j:%H:%M:%S', time.gmtime( self.stat_chan_loc_dict[key][0][1])) - templist = list(map(str, (start, end))) - text = (text + "\t" + - "\t".join(templist)) # python 3 compatible + scan_info.append(start) + scan_info.append(end) + # templist = list(map(str, (start, end))) + # text = (text + "\t" + + # "\t".join(templist)) # python 3 compatible if c: - self.scantext.setTextBackgroundColor(light_blue) - self.scantext.append(text) - self.scantext.setTextBackgroundColor(white) + scan_item = QTreeWidgetItem() + k = 0 + for i in range(len(scan_info)): + scan_item.setText(i, str(scan_info[i])) + scan_item.setBackgroundColor(i, light_blue) + k = i + # bring line to end of widget + while k != 5: + k += 1 + scan_item.setText(k, '') + scan_item.setBackgroundColor(k, light_blue) + self.scan_tree.addTopLevelItem(scan_item) c = 0 else: - self.scantext.append(text) + scan_item = QTreeWidgetItem() + k = 0 + for i in range(len(scan_info)): + scan_item.setText(i, str(scan_info[i])) + scan_item.setBackgroundColor(i, white) + k = i + # bring line to end of widget + while k != 5: + k += 1 + scan_item.setText(k, '') + scan_item.setBackgroundColor(k, white) + self.scan_tree.addTopLevelItem(scan_item) c += 1 return @@ -1054,19 +1117,8 @@ class MainWindow(QWidget): Add data found in file scan to Big Endian tab """ - yellow = Qt.yellow - white = Qt.white - light_blue = Qt.cyan - Green = Qt.darkGreen - Blue = Qt.blue - light_blue = Qt.cyan - Black = Qt.black - - tab_header = ("Trace Name \t\t\t \t\t\t \t\t\t\n" - "Start Time \t\t\t End Time \t\t\t Blockettes \t\t\t") - self.big_e_text.setTextBackgroundColor(yellow) - self.big_e_text.setText(tab_header) - self.big_e_text.setTextBackgroundColor(white) + green = Qt.darkGreen + blue = Qt.blue keylist = [] keylist = list(self.big_endian_dict.keys()) @@ -1077,67 +1129,46 @@ class MainWindow(QWidget): c = 0 if key == "All": for indexkey in list(self.big_endian_dict.keys()): - text = "<" + indexkey + ">" - self.big_e_text.setTextColor(Blue) - self.big_e_text.append(text) + index_item = QTreeWidgetItem() + index_item.setText(0, "<" + indexkey + ">") + index_item.setTextColor(0, blue) + self.big_e_tree.addTopLevelItem(index_item) + index_item.setFirstColumnSpanned(True) for directory in list(self.big_endian_dict[indexkey].keys()): - text2 = " <" + directory + ">" - self.big_e_text.setTextColor(Green) - self.big_e_text.append(text2) + directory_item = QTreeWidgetItem() + directory_item.setText(0, "<" + directory + ">") + directory_item.setTextColor(0, green) + index_item.addChild(directory_item) + directory_item.setFirstColumnSpanned(True) for trace in self.big_endian_dict[indexkey][directory]: - text = 4 * SPACE + str(trace[0]) + trace_item = QTreeWidgetItem() + trace_item.setText(1, str(trace[0])) + index_item.addChild(trace_item) templist = list(map(str, (trace[1:]))) - # different amounts of \t to make background color go to end of line - if self.scan_type == 0: - text = text + "\t\t\t\t\t\t\t\n" - elif self.scan_type == 1: - text = (text + "\t\t\t\t\t\t\t\n" + 6 * SPACE + - "\t\t".join(templist) + "\t\t\t\t\t\n") - else: - text = (text + "\t\t\t\t\t\t\t\n" + 6 * SPACE + - "\t\t".join(templist) + "\t\t\t\n") - self.big_e_text.setTextColor(Black) - if c: - self.big_e_text.setTextBackgroundColor(light_blue) - self.big_e_text.append(text) - self.big_e_text.setTextBackgroundColor(white) - c = 0 - else: - self.big_e_text.append(text) - c = 1 + for i in range(len(templist)): + trace_item.setText(i + 2, str(templist[i])) else: numtrace = 0 - text = "<" + str(key) + ">" - self.big_e_text.setTextColor(Blue) - self.big_e_text.append(text) + index_item = QTreeWidgetItem() + index_item.setText(0, "<" + key + ">") + index_item.setTextColor(0, blue) + self.big_e_tree.addTopLevelItem(index_item) + index_item.setFirstColumnSpanned(True) for directory in list(self.big_endian_dict[key].keys()): - text2 = " <" + directory + ">" - self.big_e_text.setTextColor(Green) - self.big_e_text.append(text2) + directory_item = QTreeWidgetItem() + directory_item.setText(0, "<" + directory + ">") + directory_item.setTextColor(0, green) + index_item.addChild(directory_item) + directory_item.setFirstColumnSpanned(True) for trace in self.big_endian_dict[key][directory]: - text = 4 * SPACE + str(trace[0]) + trace_item = QTreeWidgetItem() + trace_item.setText(1, str(trace[0])) + index_item.addChild(trace_item) templist = list(map(str, (trace[1:]))) - - # different amounts of \t to make background color go to end of line - if self.scan_type == 0: - text = text + "\t\t\t\t\t\t\t\n" - elif self.scan_type == 1: - text = (text + "\t\t\t\t\t\t\t\n" + 6 * SPACE + - "\t\t".join(templist) + "\t\t\t\t\t\n") - else: - text = text + ("\t\t\t\t\t\t\t\n" + 6 * SPACE + - "\t\t".join(templist) + "\t\t\t\n") - self.big_e_text.setTextColor(Black) - if c: - self.big_e_text.setTextBackgroundColor(light_blue) - self.big_e_text.append(text) - self.big_e_text.setTextBackgroundColor(white) - c = 0 - else: - self.big_e_text.append(text) - c = 1 + for i in range(len(templist)): + trace_item.setText(i + 2, str(templist[i])) numtrace += 1 - + index_item.setExpanded(True) if numtrace == 1: text = "Displaying " + str(numtrace) + " trace." else: @@ -1153,92 +1184,62 @@ class MainWindow(QWidget): Add data found in file scan to Little Endian tab """ - yellow = Qt.yellow - white = Qt.white - light_blue = Qt.cyan - Green = Qt.darkGreen - Blue = Qt.blue - light_blue = Qt.cyan - Black = Qt.black - - tab_header = ("Trace Name \t\t\t \t\t\t \t\t\t\n" - "Start Time \t\t\t End Time \t\t\t Blockettes \t\t\t") - - self.little_e_text.setTextBackgroundColor(yellow) - self.little_e_text.setText(tab_header) - self.little_e_text.setTextBackgroundColor(white) + green = Qt.darkGreen + blue = Qt.blue keylist = [] - keylist = list(self.big_little_dict.keys()) + keylist = list(self.little_endian_dict.keys()) keylist.sort() - if not self.big_little_dict: + if not self.little_endian_dict: return c = 0 if key == "All": - for indexkey in list(self.big_little_dict.keys()): - text = "<" + indexkey + ">" - self.little_e_text.setTextColor(Blue) - self.little_e_text.append(text) - for directory in list(self.big_little_dict[indexkey].keys()): - text2 = " <" + directory + ">" - self.little_e_text.setTextColor(Green) - self.little_e_text.append(text2) - for trace in self.big_little_dict[indexkey][directory]: - text = 4 * SPACE + str(trace[0]) + for indexkey in list(self.little_endian_dict.keys()): + index_item = QTreeWidgetItem() + index_item.setText(0, "<" + indexkey + ">") + index_item.setTextColor(0, blue) + self.little_e_tree.addTopLevelItem(index_item) + index_item.setFirstColumnSpanned(True) + for directory in list(self.little_endian_dict[indexkey].keys()): + directory_item = QTreeWidgetItem() + directory_item.setText(0, "<" + directory + ">") + directory_item.setTextColor(0, green) + index_item.addChild(directory_item) + directory_item.setFirstColumnSpanned(True) + for trace in self.little_endian_dict[indexkey][directory]: + trace_item = QTreeWidgetItem() + trace_item.setText(1, str(trace[0])) + index_item.addChild(trace_item) templist = list(map(str, (trace[1:]))) - - # different amounts of \t to make background color go to end of line - if self.scan_type == 0: - text = text + "\t\t\t\t\t\t\t\n" - elif self.scan_type == 1: - text = (text + "\t\t\t\t\t\t\t\n" + 6 * SPACE + - "\t\t".join(templist) + "\t\t\t\t\t\n") - else: - text = (text + "\t\t\t\t\t\t\t\n" + 6 * SPACE + - "\t\t".join(templist) + "\t\t\t\n") - self.little_e_text.setTextColor(Black) - if c: - self.little_e_text.setTextBackgroundColor(light_blue) - self.little_e_text.append(text) - self.little_e_text.setTextBackgroundColor(white) - c = 0 - else: - self.little_e_text.append(text) - c = 1 + for i in range(len(templist)): + trace_item.setText(i + 2, str(templist[i])) else: numtrace = 0 - text = "<" + key + ">" - self.little_e_text.setTextColor(Blue) - self.little_e_text.append(text) - for directory in list(self.big_little_dict[key].keys()): - text2 = " <" + directory + ">" - self.little_e_text.setTextColor(Green) - self.little_e_text.append(text2) - for trace in self.big_little_dict[key][directory]: - text = 4 * SPACE + str(trace[0]) + index_item = QTreeWidgetItem() + index_item.setText(0, "<" + key + ">") + index_item.setTextColor(0, blue) + self.little_e_tree.addTopLevelItem(index_item) + index_item.setFirstColumnSpanned(True) + for directory in list(self.little_endian_dict[key].keys()): + directory_item = QTreeWidgetItem() + directory_item.setText(0, "<" + directory + ">") + directory_item.setTextColor(0, green) + index_item.addChild(directory_item) + directory_item.setFirstColumnSpanned(True) + for trace in self.little_endian_dict[key][directory]: + trace_item = QTreeWidgetItem() + trace_item.setText(1, str(trace[0])) + index_item.addChild(trace_item) templist = list(map(str, (trace[1:]))) - - # different amounts of \t to make background color go to end of line - if self.scan_type == 0: - text = text + "\t\t\t\t\t\t\t\n" - elif self.scan_type == 1: - text = (text + "\t\t\t\t\t\t\t\n" + 6 * SPACE + - "\t\t".join(templist) + "\t\t\t\t\t\n") - else: - text = (text + "\t\t\t\t\t\t\t\n" + 6 * SPACE + - "\t\t".join(templist) + "\t\t\t\n") - self.little_e_text.setTextColor(Black) - if c: - self.little_e_text.setTextBackgroundColor(light_blue) - self.little_e_text.append(text) - self.little_e_text.setTextBackgroundColor(white) - c = 0 - else: - self.little_e_text.append(text) - c = 1 + for i in range(len(templist)): + trace_item.setText(i + 2, str(templist[i])) numtrace += 1 - text = "Displaying " + str(numtrace) + " traces" + index_item.setExpanded(True) + if numtrace == 1: + text = "Displaying " + str(numtrace) + " trace." + else: + text = "Displaying " + str(numtrace) + " trace." self.infobar.setText(text) self.infobar.setStyleSheet( "background-color:green;") @@ -1250,7 +1251,7 @@ class MainWindow(QWidget): Filters Error entries """ - self.error_text.clear() + self.error_tree.clear() if self.error_type == 0: textlist = self.error_all elif self.error_type == 1: @@ -1262,8 +1263,12 @@ class MainWindow(QWidget): elif self.error_type == 4: textlist = self.error_unique for (textcmd, color) in textlist: - self.error_text.setTextColor(color) - self.error_text.append(textcmd) + error_item = QTreeWidgetItem() + error_item.setText(0, textcmd) + error_item.setTextColor(0, color) + self.error_tree.addTopLevelItem(error_item) + # self.error_text.setTextColor(color) + # self.error_text.append(textcmd) def update_infobar(self, numfiles, numerrors): """ @@ -1317,6 +1322,7 @@ class MainWindow(QWidget): """ index = self.big_e_dropmenu.currentText() + self.big_e_tree.clear() if index == "All": self.write_big_endian("All") else: @@ -1328,6 +1334,7 @@ class MainWindow(QWidget): """ index = self.little_e_dropmenu.currentText() + self.little_e_tree.clear() if index == "All": self.write_little_endian("All") else: @@ -1530,7 +1537,6 @@ class MainWindow(QWidget): outfile.write("%s\n" % "All Errors") outfile.write("%s\n" % divider) if self.error_all: - # for (text, color) in self.error_all: for (text, color) in self.error_all: outfile.write("%s" % text) else: -- GitLab