fix some bugs

This commit is contained in:
copper 2022-05-18 20:28:17 +08:00
parent a890d80b05
commit ece939b29e
4 changed files with 78 additions and 29 deletions

View File

@ -18,9 +18,9 @@ class LayerTree(QtWidgets.QWidget):
RIGHT_RASTER = 1 RIGHT_RASTER = 1
GRID = 3 GRID = 3
tree_changed = QtCore.pyqtSignal(str) tree_changed = QtCore.pyqtSignal()
zoom_to_layer_signal = QtCore.pyqtSignal(str) zoom_to_layer_signal = QtCore.pyqtSignal(str)
result_clicked = QtCore.pyqtSignal(str, int)
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
# self.tree_view = QTreeView(self) # self.tree_view = QTreeView(self)
@ -36,17 +36,11 @@ class LayerTree(QtWidgets.QWidget):
self.root.setText(0,'图层') self.root.setText(0,'图层')
self.root.setIcon(0,QtGui.QIcon(':/icons/layer.png')) self.root.setIcon(0,QtGui.QIcon(':/icons/layer.png'))
# child1=QTreeWidgetItem()
# child1.setText(0,'child1')
# child1.setCheckState(0,Qt.Checked)
# self.root.addChild(child1)
self.tree.expandAll() self.tree.expandAll()
self.tree.addTopLevelItem(self.root) self.tree.addTopLevelItem(self.root)
# self.tree.clicked.connect(self.onClicked)
self.tree.itemClicked.connect(self.onItemClicked)
self.tree.itemChanged.connect(self.onItemChanged) self.tree.itemChanged.connect(self.onItemChanged)
layout = QtWidgets.QGridLayout() layout = QtWidgets.QGridLayout()
@ -56,21 +50,6 @@ class LayerTree(QtWidgets.QWidget):
self.is_in_add_layer = False self.is_in_add_layer = False
self.current_item = None self.current_item = None
def onItemClicked(self, item:QtWidgets.QTreeWidgetItem, column):
if item == self.root:
return
root = item
if item.data(0, Qt.UserRole) != LayerTree.LAYER_TOOT:
root = item.parent()
if item.data(0, Qt.UserRole) == LayerTree.LAYER_TOOT:
return
layer = Project().layers[root.data(0, Qt.UserRole + 1)]
Project().current_layer = layer
if item.data(0, Qt.UserRole) == LayerTree.RESULT:
# result = layer.results[item.data(0, Qt.UserRole + 1)]
self.result_clicked.emit(layer.id, item.data(0, Qt.UserRole + 1))
def onItemChanged(self, item:QtWidgets.QTreeWidgetItem, column): def onItemChanged(self, item:QtWidgets.QTreeWidgetItem, column):
if self.is_in_add_layer: if self.is_in_add_layer:
return return
@ -94,7 +73,7 @@ class LayerTree(QtWidgets.QWidget):
if item.data(0, Qt.UserRole) == LayerTree.GRID: if item.data(0, Qt.UserRole) == LayerTree.GRID:
layer.grid_enable = item.checkState(0) == Qt.Checked layer.grid_enable = item.checkState(0) == Qt.Checked
self.tree_changed.emit(layer.id) self.tree_changed.emit()
def add_layer(self, layer:str): def add_layer(self, layer:str):
# self.tree.it # self.tree.it

View File

@ -100,6 +100,28 @@ class DoubleCanvas(QWidget):
self.mapcanva1.setMapTool(QgsMapToolZoom(self.mapcanva1, True)) self.mapcanva1.setMapTool(QgsMapToolZoom(self.mapcanva1, True))
self.mapcanva2.setMapTool(QgsMapToolZoom(self.mapcanva2, True)) self.mapcanva2.setMapTool(QgsMapToolZoom(self.mapcanva2, True))
def update_layer(self):
layers = Project().layers
layer_list_1 = []
layer_list_2 = []
for layer in layers.values():
if layer.enable:
if layer.grid_enable and self.grid_show:
layer_list_1.append(layer.grid_layer.grid_layer)
layer_list_2.append(layer.grid_layer.grid_layer)
if layer.l1_enable:
layer_list_1.append(layer.l1)
if layer.l2_enable:
layer_list_2.append(layer.l2)
for result in layer.results:
if result.enable:
layer_list_1.append(result.layer)
layer_list_2.append(result.layer)
self.mapcanva1.setLayers(layer_list_1)
self.mapcanva2.setLayers(layer_list_2)
def add_layer(self, layer:str): def add_layer(self, layer:str):
if not layer in Project().layers: if not layer in Project().layers:
self.clear() self.clear()

View File

@ -1,6 +1,8 @@
from collections import OrderedDict from collections import OrderedDict
import os import os
from pathlib import Path from pathlib import Path
from threading import Thread
from time import sleep, time
from typing import Dict, List from typing import Dict, List
import uuid import uuid
import numpy as np import numpy as np
@ -24,6 +26,21 @@ class Project(QObject):
ABSOLUTE_MODE = 'absolute' ABSOLUTE_MODE = 'absolute'
RELATIVE_MODE = 'relative' RELATIVE_MODE = 'relative'
def run_auto_save(self):
t = Thread(target=self.auto_save)
t.run()
def auto_save(self):
# pre = time()
while True:
if Settings.General().auto_save and self.is_init:
self.save()
if self.is_closed:
break
sleep(Settings.General().auto_save_intervel)
def __init__(self, def __init__(self,
parent=None): parent=None):
super().__init__(parent) super().__init__(parent)
@ -35,6 +52,8 @@ class Project(QObject):
self.file_mode = Project.ABSOLUTE_MODE self.file_mode = Project.ABSOLUTE_MODE
self.layers:Dict[str, PairLayer] = OrderedDict() self.layers:Dict[str, PairLayer] = OrderedDict()
self.current_layer = None self.current_layer = None
self.is_closed = False
self.run_auto_save()
def connect(self, pair_canvas, def connect(self, pair_canvas,
layer_tree, layer_tree,
@ -47,8 +66,7 @@ class Project(QObject):
self.layer_load.connect(layer_tree.add_layer) self.layer_load.connect(layer_tree.add_layer)
self.layer_load.connect(pair_canvas.add_layer) self.layer_load.connect(pair_canvas.add_layer)
# self.layer_load.connect(message_box.add_layer)
#
def change_result(self, layer_id, result_id, data): def change_result(self, layer_id, result_id, data):
if layer_id in self.layers: if layer_id in self.layers:
result = self.layers[layer_id].results[result_id] result = self.layers[layer_id].results[result_id]
@ -73,7 +91,7 @@ class Project(QObject):
pass pass
else: else:
self.load() self.load()
self.cmi_dir = str(Path(self.root)/'cmi') # self.cmi_dir = str(Path(self.root)/'cmi')
# self.project_created.emit() # self.project_created.emit()
self.project_init.emit(True) self.project_init.emit(True)

View File

@ -146,3 +146,33 @@ class Settings(QSettings):
with Settings(Settings.General.PRE) as s: with Settings(Settings.General.PRE) as s:
return s.value('root', './') return s.value('root', './')
@property
def auto_save(self):
with Settings(Settings.General.PRE) as s:
return s.value('auto_save', True)
@property.setter
def auto_save(self, value):
if isinstance(value, bool):
pass
else:
if isinstance(value, (int,float)):
value = value != 0
else:
value = value is not None
with Settings(Settings.General.PRE) as s:
s.setValue('auto_save', value)
@property
def auto_save_intervel(self):
with Settings(Settings.General.PRE) as s:
return s.value('auto_save_intervel', 30)
@property.setter
def auto_save_intervel(self, value):
if isinstance(value, int) and value > 0:
pass
else:
return
with Settings(Settings.General.PRE) as s:
s.setValue('auto_save_intervel', value)