geomerty: Minor change and fix.

mesh
Pierre-Antoine Rouby 2023-04-17 17:31:40 +02:00
parent 8fdfd52ff1
commit 54909af8dd
4 changed files with 130 additions and 150 deletions

View File

@ -229,7 +229,7 @@ class Reach:
return (complete, incomplete) return (complete, incomplete)
def _map_guidelines_points(self, func): def _map_guidelines_points(self, func, _filter=None):
return list( return list(
# Map for each guideline # Map for each guideline
map( map(
@ -240,7 +240,10 @@ class Reach:
self._guidelines[k], self._guidelines[k],
) )
), ),
self._guidelines self._guidelines if not _filter else filter(
_filter,
self._guidelines
)
) )
) )

View File

@ -36,7 +36,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.tableView = self.ui.tableView self.tableView = self.ui.tableView
self.tableView_header = self.ui.tableView_header self.tableView_header = self.ui.tableView_header
self.model = None self._tablemodel = None
self.setup_window() self.setup_window()
self.setup_model() self.setup_model()
@ -47,11 +47,11 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.setWindowTitle(f"{self.ui.mainwindow_title} - {self._reach.name}") self.setWindowTitle(f"{self.ui.mainwindow_title} - {self._reach.name}")
def setup_model(self): def setup_model(self):
self.model = qtableview_reach.PandasModelEditable( self._tablemodel = qtableview_reach.PandasModelEditable(
headers = self.ui.tableView_header, headers = self.ui.tableView_header,
reach = self._reach reach = self._reach
) )
self.tableView.setModel(self.model) self.tableView.setModel(self._tablemodel)
self.tableView.setItemDelegate(qtableview_reach.Delegate()) self.tableView.setItemDelegate(qtableview_reach.Delegate())
def setup_plot(self): def setup_plot(self):
@ -98,13 +98,12 @@ class GeometryWindow(QMainWindow, WindowToolKit):
if filename != "": if filename != "":
size = os.stat(filename).st_size size = os.stat(filename).st_size
self._reach.import_geometry(filename) self._reach.import_geometry(filename)
self.model.layoutChanged.emit() self._tablemodel.layoutChanged.emit()
self.update_profile_windows() self.update_profile_windows()
self.graphic_1() self.graphic_1()
self.graphic_2() self.graphic_2()
self.graphic_3() self.graphic_3()
self.fichier_ouvert = True
# Profile selection when line change in table # Profile selection when line change in table
self.tableView.selectionModel()\ self.tableView.selectionModel()\
@ -112,8 +111,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
.connect(self.select_current_profile) .connect(self.select_current_profile)
# Update plot when profile data change # Update plot when profile data change
self.model.dataChanged.connect(self.update_graphic_1) self._tablemodel.dataChanged.connect(self.update_graphic_1)
self.model.dataChanged.connect(self.update_graphic_2) self._tablemodel.dataChanged.connect(self.update_graphic_2)
self.tableView.selectionModel()\ self.tableView.selectionModel()\
.selectionChanged\ .selectionChanged\
.connect(self.update_graphic_1) .connect(self.update_graphic_1)
@ -211,14 +210,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
pyqtSlot(bool) pyqtSlot(bool)
def changed_profile_slot(self, status): def changed_profile_slot(self, status):
print("status du changement ", status)
self.update_view1 = status self.update_view1 = status
print(self.update_view1)
def update_graphic_1_profile(self):
if self.update_view1:
self.update_graphic_1()
print("update_graphic_1_profile")
def update_profile_windows(self): def update_profile_windows(self):
self.list_second_window = [] self.list_second_window = []
@ -322,10 +314,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.line_kp_zgl = [ self.line_kp_zgl = [
self.ui.canvas_2.axes.plot( self.ui.canvas_2.axes.plot(
self._reach.get_kp(), i, lw=1. self._reach.get_kp(), i, lw=1.
) for i in self.model.z_complete_guideline() ) for i in self._reach.get_guidelines_z()
] ]
except: except:
print("TODO") print("Graphic 2: Z guidelines failed")
self.line_kp_zmin, = self.ui.canvas_2.axes.plot( self.line_kp_zmin, = self.ui.canvas_2.axes.plot(
kp, z_min, kp, z_min,
@ -342,16 +334,16 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def update_graphic_1(self): def update_graphic_1(self):
self.tableView.model().blockSignals(True) self.tableView.model().blockSignals(True)
for ind in range(self.model.rowCount()): for ind in range(self._tablemodel.rowCount()):
self.line_xy[ind][0].set_data( self.line_xy[ind][0].set_data(
self._reach.profile(ind).x, self._reach.profile(ind).x(),
self._reach.profile(ind).y self._reach.profile(ind).y()
) )
for i in range(len(self.line_gl_1)): for i in range(len(self.line_gl_1)):
self.line_gl_1[i].set_data( self.line_gl_1[i].set_data(
[x[i] for x in self.get_x_complete_list_gl], [x[i] for x in self.x_complete],
[y[i] for y in self.get_y_complete_list_gl] [y[i] for y in self.y_complete]
) )
self.tableView.model().blockSignals(False) self.tableView.model().blockSignals(False)
@ -376,10 +368,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
try: try:
for i in range(len(self.line_kp_zgl)): for i in range(len(self.line_kp_zgl)):
self.line_kp_zgl[i][0].set_data( self.line_kp_zgl[i][0].set_data(
kp, self.model.z_complete_guideline()[i] kp, self._tablemodel.z_complete_guideline()[i]
) )
except: except:
print("TODO") print("Failed to update graphic 2")
self.tableView.model().blockSignals(False) self.tableView.model().blockSignals(False)
self.ui.canvas_2.axes.autoscale_view(True, True, True) self.ui.canvas_2.axes.autoscale_view(True, True, True)
@ -494,47 +486,46 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.annotation_3[:] = [] self.annotation_3[:] = []
x = self.profile(ind).get_station() x = self._reach.profile(ind).get_station()
y = self._reach.profile(ind).z() y = self._reach.profile(ind).z()
gl = self._reach.profile(ind).name gl = self._reach.profile(ind).name
get_complete_list_gl = self._reach.get_complete_list_gl() complete, incomplete = self._reach.compute_guidelines()
get_incomplete_list_gl = self._reach.get_incomplete_list_gl()
try: try:
x_gl_complete = [] x_complete = []
color_scat_complete_gl = [] color_scat_complete = []
x_gl_incomplete = [] x_incomplete = []
color_scat_incomplete_gl = [] color_scat_incomplete = []
for i, txt in enumerate(list(gl)): for i, txt in enumerate(list(gl)):
if txt in get_complete_list_gl: if txt in complete:
annotate = self.ui.canvas_3.axes.annotate( annotate = self.ui.canvas_3.axes.annotate(
txt, (x[i], y[i]), horizontalalignment='left', txt, (x[i], y[i]), horizontalalignment='left',
verticalalignment='top', annotation_clip=True, verticalalignment='top', annotation_clip=True,
fontsize=11, fontsize=11,
color=self.color_complete_gl[ color=self.color_complete[
get_complete_list_gl.index(txt) complete.index(txt)
], ],
size=10 size=10
) )
self.annotation_3.append(annotate) self.annotation_3.append(annotate)
x_gl_complete.append([x[i], y[i]]) x_complete.append([x[i], y[i]])
color_scat_complete_gl.append( color_scat_complete.append(
self.color_complete_gl[self.complete_gl.index(txt)] self.color_complete[self.complete.index(txt)]
) )
elif txt in get_incomplete_list_gl: elif txt in incomplete:
annotate = self.ui.canvas_3.axes.annotate( annotate = self.ui.canvas_3.axes.annotate(
txt, (x[i], y[i]), horizontalalignment='left', txt, (x[i], y[i]), horizontalalignment='left',
verticalalignment='top', annotation_clip=True, verticalalignment='top', annotation_clip=True,
fontsize=11, fontsize=11,
color=self.color_incomplete_gl[ color=self.color_incomplete[
get_incomplete_list_gl.index(txt) incomplete.index(txt)
], ],
size=10 size=10
) )
self.annotation_3.append(annotate) self.annotation_3.append(annotate)
x_gl_incomplete.append([x[i], y[i]]) x_incomplete.append([x[i], y[i]])
color_scat_incomplete_gl.append( color_scat_incomplete.append(
self.color_incomplete_gl[get_incomplete_list_gl.index(txt)] self.color_incomplete[incomplete.index(txt)]
) )
except: except:
print("FIXME") print("FIXME")
@ -559,43 +550,34 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def update_graphic_3(self, ind: int): def update_graphic_3(self, ind: int):
self.tableView.model().blockSignals(True) self.tableView.model().blockSignals(True)
if ind == 0: # ind - 1
if ind != 0:
self.profile_i_minus_1.set_data(
self.get_station(ind - 1),
self.get_elevation(ind - 1)
)
else:
self.profile_i_minus_1.set_data([], []) self.profile_i_minus_1.set_data([], [])
self.profile_i.set_data(
self.get_station(ind), # ind
self.get_elevation(ind) self.profile_i.set_data(
) self.get_station(ind),
self.get_elevation(ind)
)
# ind + 1
if ind != self._tablemodel.rowCount() - 1:
self.profile_i_plus_1.set_data( self.profile_i_plus_1.set_data(
self.get_station(ind + 1), self.get_station(ind + 1),
self.get_elevation(ind + 1) self.get_elevation(ind + 1)
) )
elif ind == self.model.rowCount() - 1: else:
self.profile_i_minus_1.set_data(
self.get_station(ind - 1),
self.get_elevation(ind - 1)
)
self.profile_i.set_data(
self.get_station(ind),
self.get_elevation(ind)
)
self.profile_i_plus_1.set_data([], []) self.profile_i_plus_1.set_data([], [])
elif 0 < ind < self.model.rowCount() - 1:
self.profile_i_minus_1.set_data(
self.get_station(ind - 1),
self.get_elevation(ind - 1)
)
self.profile_i.set_data(
self.get_station(ind),
self.get_elevation(ind)
)
self.profile_i_plus_1.set_data(
self.get_station(ind + 1),
self.get_elevation(ind + 1)
)
self.tableView.model().blockSignals(False) self.tableView.model().blockSignals(False)
self.update_annotate_3(ind)
# Update graphic 3
self.update_annotate_3(ind)
self.ui.canvas_3.axes.relim() self.ui.canvas_3.axes.relim()
self.ui.canvas_3.axes.autoscale_view() self.ui.canvas_3.axes.autoscale_view()
self.ui.canvas_3.figure.canvas.draw_idle() self.ui.canvas_3.figure.canvas.draw_idle()
@ -603,47 +585,48 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def select_plot_graphic_1(self, ind: int): def select_plot_graphic_1(self, ind: int):
self.tableView.model().blockSignals(True) self.tableView.model().blockSignals(True)
if 0 <= ind < self.model.rowCount(): if 0 <= ind < self._tablemodel.rowCount():
self.plot_selected_1.set_data(self._reach.profile(ind).x, self.plot_selected_1.set_data(self._reach.profile(ind).x(),
self._reach.profile(ind).y) self._reach.profile(ind).y())
self.plot_selected_1.set_visible(True) self.plot_selected_1.set_visible(True)
self.tableView.model().blockSignals(False) self.tableView.model().blockSignals(False)
def select_plot_graphic_2(self, ind: int): def select_plot_graphic_2(self, ind: int):
kp_i = self._reach.profile(ind).kp kp_i = self._reach.profile(ind).kp
z_min_i = self._reach.profile(ind).z_min z_min_i = self._reach.profile(ind).z_min()
z_max_i = self._reach.profile(ind).z_max z_max_i = self._reach.profile(ind).z_max()
if 0 <= ind < self.model.rowCount(): if 0 <= ind < self._tablemodel.rowCount():
self.plot_selected_2.set_data((kp_i, kp_i), self.plot_selected_2.set_data((kp_i, kp_i),
(z_min_i, z_max_i)) (z_min_i, z_max_i))
self.plot_selected_2.set_visible(True) self.plot_selected_2.set_visible(True)
def select_before_plot_selected_1(self, ind: int): def select_before_plot_selected_1(self, ind: int):
if 0 <= ind < self.model.rowCount(): if 0 <= ind < self._tablemodel.rowCount():
self.before_plot_selected_1.set_data( self.before_plot_selected_1.set_data(
self._reach.profile(ind).x, self._reach.profile(ind).x(),
self._reach.profile(ind).y self._reach.profile(ind).y()
) )
self.before_plot_selected_1.set_visible(True) self.before_plot_selected_1.set_visible(True)
self.ui.canvas_1.figure.canvas.draw_idle() self.ui.canvas_1.figure.canvas.draw_idle()
def select_after_plot_selected_1(self, ind: int): def select_after_plot_selected_1(self, ind: int):
if 0 <= ind < self.model.rowCount(): if 0 <= ind < self._tablemodel.rowCount():
self.after_plot_selected_1.set_data( self.after_plot_selected_1.set_data(
self._reach.profile(ind).x, self._reach.profile(ind).x(),
self._reach.profile(ind).y self._reach.profile(ind).y()
) )
self.after_plot_selected_1.set_visible(True) self.after_plot_selected_1.set_visible(True)
self.ui.canvas_1.figure.canvas.draw_idle() self.ui.canvas_1.figure.canvas.draw_idle()
def select_before_plot_selected_2(self, ind: int): def select_before_plot_selected_2(self, ind: int):
if 0 <= ind < self.model.rowCount(): if 0 <= ind < self._tablemodel.rowCount():
kp_i = self._reach.profile(ind).kp kp_i = self._reach.profile(ind).kp
z_min_i = self._reach.profile(ind).z_min z_min_i = self._reach.profile(ind).z_min()
z_max_i = self._reach.profile(ind).z_max z_max_i = self._reach.profile(ind).z_max()
self.before_plot_selected_2.set_data( self.before_plot_selected_2.set_data(
(kp_i, kp_i), (kp_i, kp_i),
@ -654,10 +637,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.ui.canvas_2.figure.canvas.draw_idle() self.ui.canvas_2.figure.canvas.draw_idle()
def select_after_plot_selected_2(self, ind: int): def select_after_plot_selected_2(self, ind: int):
if 0 <= ind < self.model.rowCount(): if 0 <= ind < self._tablemodel.rowCount():
kp_i = self._reach.profile(ind).kp kp_i = self._reach.profile(ind).kp
z_min_i = self._reach.profile(ind).z_min z_min_i = self._reach.profile(ind).z_min()
z_max_i = self._reach.profile(ind).z_max z_max_i = self._reach.profile(ind).z_max()
self.after_plot_selected_2.set_data( self.after_plot_selected_2.set_data(
(kp_i, kp_i), (kp_i, kp_i),
@ -696,12 +679,12 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.select_after_plot_selected_1(row + 1) self.select_after_plot_selected_1(row + 1)
self.before_plot_selected_2.set_visible(False) self.before_plot_selected_2.set_visible(False)
self.select_after_plot_selected_2(row + 1) self.select_after_plot_selected_2(row + 1)
elif 0 < row < self.model.rowCount() - 1: elif 0 < row < self._tablemodel.rowCount() - 1:
self.select_before_plot_selected_1(row - 1) self.select_before_plot_selected_1(row - 1)
self.select_after_plot_selected_1(row + 1) self.select_after_plot_selected_1(row + 1)
self.select_before_plot_selected_2(row - 1) self.select_before_plot_selected_2(row - 1)
self.select_after_plot_selected_2(row + 1) self.select_after_plot_selected_2(row + 1)
elif row == self.model.rowCount() - 1: elif row == self._tablemodel.rowCount() - 1:
self.after_plot_selected_1.set_visible(False) self.after_plot_selected_1.set_visible(False)
self.select_before_plot_selected_1(row - 1) self.select_before_plot_selected_1(row - 1)
self.after_plot_selected_2.set_visible(False) self.after_plot_selected_2.set_visible(False)
@ -715,8 +698,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def changed_slider_value(self): def changed_slider_value(self):
self.tableView.model().blockSignals(True) self.tableView.model().blockSignals(True)
if self.model.rowCount() != 0: if self._tablemodel.rowCount() != 0:
self.ui.verticalSlider.setMaximum(self.model.rowCount() - 1) self.ui.verticalSlider.setMaximum(self._tablemodel.rowCount() - 1)
slider_value = self.ui.verticalSlider.value() slider_value = self.ui.verticalSlider.value()
kp = self._reach.profile(slider_value).kp kp = self._reach.profile(slider_value).kp
@ -735,19 +718,19 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.tableView.model().blockSignals(False) self.tableView.model().blockSignals(False)
def increment_value_slider(self): def increment_value_slider(self):
if 0 <= self.ui.verticalSlider.value() < self.model.rowCount() - 1: if 0 <= self.ui.verticalSlider.value() < self._tablemodel.rowCount() - 1:
self.ui.verticalSlider.setValue(self.ui.verticalSlider.value() + 1) self.ui.verticalSlider.setValue(self.ui.verticalSlider.value() + 1)
def decrement_value_slider(self): def decrement_value_slider(self):
if 0 < self.ui.verticalSlider.value() < self.model.rowCount(): if 0 < self.ui.verticalSlider.value() < self._tablemodel.rowCount():
self.ui.verticalSlider.setValue(self.ui.verticalSlider.value() - 1) self.ui.verticalSlider.setValue(self.ui.verticalSlider.value() - 1)
def insert_row(self): def insert_row(self):
if len(self.tableView.selectedIndexes()) == 0: if len(self.tableView.selectedIndexes()) == 0:
self.model.insertRows(self.model.rowCount(), 1) self._tablemodel.insertRows(self._tablemodel.rowCount(), 1)
else: else:
row = self.index_selected_row row = self.index_selected_row
self.model.insertRows(row + 1, 1) self._tablemodel.insertRows(row + 1, 1)
if self.filename is not None: if self.filename is not None:
self.graphic_1() self.graphic_1()
@ -760,7 +743,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
)) ))
if len(rows) > 0: if len(rows) > 0:
self.model.remove_rows(rows) self._tablemodel.remove_rows(rows)
self.update_graphic_1() self.update_graphic_1()
self.select_current_profile() self.select_current_profile()
@ -770,10 +753,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
@property @property
def index_selected_row(self): def index_selected_row(self):
return [index.row() for index in self.tableView.selectedIndexes()][0] return self.tableView.selectedIndexes()[0].row()
def sort_ascending(self): def sort_ascending(self):
self.model.sort_profiles(True) self._tablemodel.sort_profiles(True)
self.select_current_profile() self.select_current_profile()
self.changed_slider_value() self.changed_slider_value()
@ -781,7 +764,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.update_graphic_3(self.index_selected_row) self.update_graphic_3(self.index_selected_row)
def sort_descending(self): def sort_descending(self):
self.model.sort_profiles(False) self._tablemodel.sort_profiles(False)
self.select_current_profile() self.select_current_profile()
self.changed_slider_value() self.changed_slider_value()
@ -792,22 +775,22 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def move_row_down(self): def move_row_down(self):
row = self.index_selected_row row = self.index_selected_row
if row < self.model.rowCount() - 1: if row < self._tablemodel.rowCount() - 1:
self.model.moveRowDown(row) self._tablemodel.moveRowDown(row)
self.update_graphic_3(row + 1) self.update_graphic_3(row + 1)
self.ui.canvas_3.axes.relim() self.ui.canvas_3.axes.relim()
self.ui.canvas_3.axes.autoscale_view() self.ui.canvas_3.axes.autoscale_view()
if row < self.model.rowCount() - 2: if row < self._tablemodel.rowCount() - 2:
self.select_before_plot_selected_1(row) self.select_before_plot_selected_1(row)
self.select_after_plot_selected_1(row + 2) self.select_after_plot_selected_1(row + 2)
self.select_before_plot_selected_2(row) self.select_before_plot_selected_2(row)
self.select_after_plot_selected_2(row + 2) self.select_after_plot_selected_2(row + 2)
if row == self.model.rowCount() - 2: if row == self._tablemodel.rowCount() - 2:
self.select_before_plot_selected_1(self.model.rowCount() - 2) self.select_before_plot_selected_1(self._tablemodel.rowCount() - 2)
self.after_plot_selected_1.set_visible(False) self.after_plot_selected_1.set_visible(False)
self.select_before_plot_selected_2(self.model.rowCount() - 2) self.select_before_plot_selected_2(self._tablemodel.rowCount() - 2)
self.after_plot_selected_2.set_visible(False) self.after_plot_selected_2.set_visible(False)
self.update_graphic_2() self.update_graphic_2()
@ -815,8 +798,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def move_row_up(self): def move_row_up(self):
row = self.index_selected_row row = self.index_selected_row
if 0 < row <= self.model.rowCount() - 1: if 0 < row <= self._tablemodel.rowCount() - 1:
self.model.moveRowUp(row) self._tablemodel.moveRowUp(row)
if row == 1: if row == 1:
self.select_after_plot_selected_1(row) self.select_after_plot_selected_1(row)
@ -824,7 +807,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.select_after_plot_selected_2(row) self.select_after_plot_selected_2(row)
self.before_plot_selected_2.set_visible(False) self.before_plot_selected_2.set_visible(False)
elif row == self.model.rowCount() - 1: elif row == self._tablemodel.rowCount() - 1:
self.select_before_plot_selected_1(row - 2) self.select_before_plot_selected_1(row - 2)
self.select_after_plot_selected_1(row) self.select_after_plot_selected_1(row)
self.select_before_plot_selected_2(row - 2) self.select_before_plot_selected_2(row - 2)
@ -851,9 +834,9 @@ class GeometryWindow(QMainWindow, WindowToolKit):
filename, filters = QFileDialog.getSaveFileName( filename, filters = QFileDialog.getSaveFileName(
self, self,
filter=_translate("MainWindow_reach", filter=_translate("MainWindow_reach",
"Fichiers .ST(*.ST ou *.st)") "Files .ST(*.ST or *.st)")
+ ";; " + + ";; " +
_translate("MainWindow_reach", "Tous les fichiers " _translate("MainWindow_reach", "All files "
"(*)"), "(*)"),
options=options options=options
) )
@ -861,7 +844,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
current_dir = os.path.split(filename)[0] or DEFAULT_DIRECTORY current_dir = os.path.split(filename)[0] or DEFAULT_DIRECTORY
if filename != '': if filename != '':
self.model.export_reach(filename) self._tablemodel.export_reach(filename)
def handleOpen(self): def handleOpen(self):
filename, filterName = QFileDialog.getOpenFileName(self) filename, filterName = QFileDialog.getOpenFileName(self)
@ -875,7 +858,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
row[0] = QCheckBox("-") row[0] = QCheckBox("-")
buf.append(row) buf.append(row)
self.model = None self._tablemodel = None
self.model = qtableview_reach.PandasModelEditable(buf) self._tablemodel = qtableview_reach.PandasModelEditable(buf)
self.tableView.setModel(self.model) self.tableView.setModel(self._tablemodel)
filename = '' filename = ''

View File

@ -46,31 +46,32 @@ class PandasModelEditable(QAbstractTableModel):
return len(self.headers) return len(self.headers)
def data(self, index, role=Qt.DisplayRole): def data(self, index, role=Qt.DisplayRole):
if index.isValid(): if not index.isValid():
if role == Qt.DisplayRole and index.column() == 0: return QVariant()
return self._reach.profile(index.row()).name
if role == Qt.DisplayRole and index.column() == 1: if role == Qt.DisplayRole and index.column() == 0:
kp = self._reach.profile(index.row()).kp return self._reach.profile(index.row()).name
return f"{kp:.4f}"
if role == Qt.DisplayRole and index.column() == 2: if role == Qt.DisplayRole and index.column() == 1:
return self._reach.profile(index.row()).profile_type kp = self._reach.profile(index.row()).kp
return f"{kp:.4f}"
for column in range(0, self.columnCount()): if role == Qt.DisplayRole and index.column() == 2:
if index.column() == column and role == Qt.TextAlignmentRole: return self._reach.profile(index.row()).profile_type
return Qt.AlignHCenter | Qt.AlignVCenter
if role == Qt.ForegroundRole and index.column() == 0: if role == Qt.TextAlignmentRole:
name = self._reach.profile(index.row()).name\ return Qt.AlignHCenter | Qt.AlignVCenter
.strip()\
.lower() if role == Qt.ForegroundRole and index.column() == 0:
if (name == "upstream" or name == "up" or name = self._reach.profile(index.row()).name\
name == _translate("Geometry", "upstream")): .strip()\
return QtGui.QColor("Green") .lower()
elif (name == "downstream" or name == "down" or if (name == "upstream" or name == "up" or
name == _translate("Geometry", "downstream")): name == _translate("Geometry", "upstream")):
return QtGui.QColor("Red") return QtGui.QColor("Green")
elif (name == "downstream" or name == "down" or
name == _translate("Geometry", "downstream")):
return QtGui.QColor("Red")
return QVariant() return QVariant()
@ -89,11 +90,11 @@ class PandasModelEditable(QAbstractTableModel):
column = index.column() column = index.column()
if role == Qt.EditRole and index.column() != 2: if role == Qt.EditRole and index.column() != 2:
if role == Qt.EditRole and index.column() == 0: if index.column() == 0:
self._reach.profile(index.row()).name = value self._reach.profile(index.row()).name = value
if role == Qt.EditRole and index.column() == 1: if index.column() == 1:
self._reach.profile(index.row()).pk = float(value) self._reach.profile(index.row()).kp = value
self.dataChanged.emit(index, index) self.dataChanged.emit(index, index)
self.layoutChanged.emit() self.layoutChanged.emit()
@ -173,27 +174,20 @@ class Delegate(QtWidgets.QStyledItemDelegate):
self.setModelDataEvent = setModelDataEvent self.setModelDataEvent = setModelDataEvent
def createEditor(self, parent, option, index): def createEditor(self, parent, option, index):
"""retourne le widget (éditeur) pour éditer l'item se trouvant à l'index index."""
index.model().data(index, Qt.DisplayRole) index.model().data(index, Qt.DisplayRole)
return QtWidgets.QLineEdit(parent) return QtWidgets.QLineEdit(parent)
def setEditorData(self, editor, index): def setEditorData(self, editor, index):
"""permet de transmettre à l'éditeur editor les données à afficher à partir du modèle se trouvant à l'index
index. """
value = index.model().data(index, Qt.DisplayRole) # DisplayRole value = index.model().data(index, Qt.DisplayRole) # DisplayRole
editor.setText(str(value)) # récupère la valeur de la cellule applique la méthode définie dans setData editor.setText(str(value)) # récupère la valeur de la cellule applique la méthode définie dans setData
print('Donnée éditée dans la case [{},{}] :'.format(index.row(), index.column()), value)
def setModelData(self, editor, model, index): def setModelData(self, editor, model, index):
"""permet de récupérer les données de l'éditeur et de les stocker à l'intérieur du modèle, à l'index identifié model.setData(index, editor.text())
par le paramètre index """
model.setData(index, editor.currentItem().text())
if not self.setModelDataEvent is None: if not self.setModelDataEvent is None:
self.setModelDataEvent() self.setModelDataEvent()
def updateEditorGeometry(self, editor, option, index): def updateEditorGeometry(self, editor, option, index):
"""permet de redimensionner l'éditeur à la bonne taille lorsque la taille de la vue change"""
editor.setGeometry(option.rect) editor.setGeometry(option.rect)
class Delegate1(QtWidgets.QStyledItemDelegate): class Delegate1(QtWidgets.QStyledItemDelegate):

View File

@ -39,7 +39,7 @@ def main():
application = ApplicationWindow(conf=conf) application = ApplicationWindow(conf=conf)
application.show() application.show()
sys.exit(int(app.exec_())) sys.exit(app.exec_())
if __name__ == "__main__": if __name__ == "__main__":
main() main()