2022-05-28 17:23:56 +08:00

172 lines
6.8 KiB
Python

from tkinter.ttk import Style
from PyQt5.QtWidgets import QWidget, QApplication, QMainWindow, QToolBox
from PyQt5.QtWidgets import QDialog, QFileDialog, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, QLabel, QMessageBox
from PyQt5.QtCore import Qt, QSize, QSettings
from PyQt5.QtGui import QIcon,QColor
from PyQt5 import QtGui
from rscder.utils.icons import IconInstance
from rscder.utils.setting import Settings
from rscder.gui.mapcanvas import DoubleCanvas
from qgis.gui import QgsMapCanvas
from rscder.utils.project import MultiBandRasterLayer, RasterLayer
class loader(QDialog):
def __init__(self, parent=None) -> None:
super().__init__(parent)
self.setWindowTitle('载入数据')
self.setWindowIcon(IconInstance().DATA_LOAD)
self.path1=''
self.path2=''
self.bands=['red:','green:','blue:','NIR:']
self.bandsorder=[3,2,1,4]
self.mapcanva1 = QgsMapCanvas(self)
self.mapcanva2 = QgsMapCanvas(self)
self.mapcanva1.setCanvasColor(QColor(0, 0, 0))
self.mapcanva2.setCanvasColor(QColor(0, 0, 0))
self.mapcanva1.setFixedWidth(200)
self.mapcanva1.setFixedHeight(200)
self.mapcanva2.setFixedWidth(200)
self.mapcanva2.setFixedHeight(200)
maplayout=QHBoxLayout()
maplayout.addWidget(self.mapcanva1)
maplayout.addWidget(self.mapcanva2)
path1_label = QLabel('时相1影像:')
path1_label.setFixedWidth(60)
path1_input = QLineEdit()
path1_input.setPlaceholderText('时相1影像')
path1_input.setToolTip('时相1影像')
path1_input.setReadOnly(True)
path1_input.setText(self.path1)
self.path1_input = path1_input
path1_open = QPushButton('...', self)
path1_open.setFixedWidth(30)
path1_open.clicked.connect(self.open_file1)
path1_layout=QHBoxLayout()
path1_layout.addWidget(path1_label)
path1_layout.addWidget(path1_input)
path1_layout.addWidget(path1_open)
labels1=[QLabel() for i in range(4)]
style1_inputs=[QLineEdit() for i in range(4)]
for i in range(4):
labels1[i].setText(self.bands[i])
labels1[i].setFixedWidth(50)
style1_inputs[i].setText(str(self.bandsorder[i]))
style1_inputs[i].setFixedWidth(20)
self.style1_inputs=style1_inputs
style1_set = QPushButton(self.tr('确定'), self)
style1_set.setFixedWidth(40)
style1_set.clicked.connect(self.set_style1)
style1_layout=QHBoxLayout()
for i in range(4):
style1_layout.addWidget(labels1[i])
style1_layout.addWidget(style1_inputs[i])
style1_layout.addWidget(style1_set)
path2_label = QLabel('时相2影像:')
path2_label.setFixedWidth(60)
path2_input = QLineEdit()
path2_input.setPlaceholderText('时相2影像')
path2_input.setToolTip('时相2影像')
path2_input.setReadOnly(True)
path2_input.setText(self.path2)
self.path2_input = path2_input
path2_open = QPushButton('...', self)
path2_open.setFixedWidth(30)
path2_open.clicked.connect(self.open_file2)
path2_layout=QHBoxLayout()
path2_layout.addWidget(path2_label)
path2_layout.addWidget(path2_input)
path2_layout.addWidget(path2_open)
labels2=[QLabel() for i in range(4)]
style2_inputs=[QLineEdit() for i in range(4)]
for i in range(4):
labels2[i].setText(self.bands[i])
labels2[i].setFixedWidth(50)
style2_inputs[i].setText(str(self.bandsorder[i]))
style2_inputs[i].setFixedWidth(20)
self.style2_inputs=style2_inputs
style2_set = QPushButton(self.tr('确定'), self)
style2_set.setFixedWidth(40)
style2_set.clicked.connect(self.set_style2)
style2_layout=QHBoxLayout()
for i in range(4):
style2_layout.addWidget(labels2[i])
style2_layout.addWidget(style2_inputs[i])
style2_layout.addWidget(style2_set)
ok_button = QPushButton(self.tr('确定'))
cancel_button = QPushButton(self.tr('取消'))
ok_button.clicked.connect(self.ok)
cancel_button.clicked.connect(self.cancel)
button_layout = QHBoxLayout()
button_layout.setDirection(QHBoxLayout.RightToLeft)
button_layout.addWidget(ok_button, 0, Qt.AlignRight)
button_layout.addWidget(cancel_button, 0, Qt.AlignRight)
main_layout = QVBoxLayout()
main_layout.addLayout(path1_layout)
main_layout.addLayout(style1_layout)
main_layout.addLayout(path2_layout)
main_layout.addLayout(style2_layout)
main_layout.addLayout(maplayout)
main_layout.addLayout(button_layout)
self.setLayout(main_layout)
def open_file1(self):
path1 = QFileDialog.getOpenFileNames(self, '打开数据1', Settings.General().last_path, '*.*')
if path1:
self.path1 = path1[0][0]
self.path1_input.setText(self.path1)
self.left_layer=MultiBandRasterLayer(path=self.path1)
self.mapcanva1.setLayers([self.left_layer.layer])
self.mapcanva1.zoomToFeatureExtent(self.left_layer.layer.extent())
def open_file2(self):
path2 = QFileDialog.getOpenFileNames(self, '打开数据2', Settings.General().last_path, '*.*')
if path2:
self.path2 = path2[0][0]
self.path2_input.setText(self.path2)
self.right_layer=MultiBandRasterLayer(path=self.path2)
self.mapcanva2.setLayers([self.right_layer.layer])
self.mapcanva2.zoomToFeatureExtent(self.right_layer.layer.extent())
def ok(self):
self.bandsorder1=[int(q.text()) for q in self.style1_inputs ]
self.style1={'r':self.bandsorder1[0],'g':self.bandsorder1[1],'b':self.bandsorder1[2],'NIR':self.bandsorder1[3]}
self.bandsorder2=[int(q.text()) for q in self.style2_inputs ]
self.style2={'r':self.bandsorder2[0],'g':self.bandsorder2[1],'b':self.bandsorder2[2],'NIR':self.bandsorder2[3]}
if self.path1 == '':
QMessageBox.warning(self, 'Warning', 'Please select pic 1!')
return
if self.path2 == '':
QMessageBox.warning(self, 'Warning', 'Please select pic 2!')
return
self.accept()
def cancel(self):
self.reject()
def set_style1(self):
self.bandsorder1=[int(q.text()) for q in self.style1_inputs ]
self.style1={'r':self.bandsorder1[0],'g':self.bandsorder1[1],'b':self.bandsorder1[2],'NIR':self.bandsorder1[3]}
self.left_layer.set_stlye(self.style1)
def set_style2(self):
self.bandsorder2=[int(q.text()) for q in self.style2_inputs ]
self.style2={'r':self.bandsorder2[0],'g':self.bandsorder2[1],'b':self.bandsorder2[2],'NIR':self.bandsorder2[3]}
self.right_layer.set_stlye(self.style2)