ISAT_with_sam/widgets/setting_dialog.py
2023-04-20 00:00:19 +08:00

132 lines
5.0 KiB
Python

# -*- coding: utf-8 -*-
# @Author : LG
from PyQt5 import QtWidgets, QtCore, QtGui
from ui.setting_dialog import Ui_Dialog
from configs import *
import os
class SettingDialog(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, parent, mainwindow):
super(SettingDialog, self).__init__(parent)
self.mainwindow = mainwindow
self.setupUi(self)
self.setWindowModality(QtCore.Qt.WindowModality.WindowModal)
self.init_connect()
def get_item_and_widget(self, category, color: str):
item = QtWidgets.QListWidgetItem()
item.setSizeHint(QtCore.QSize(200, 40))
widget = QtWidgets.QWidget()
layout = QtWidgets.QHBoxLayout()
category_label = QtWidgets.QLabel()
category_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
category_label.setText(category)
category_label.setObjectName('category')
# 颜色
color_button = QtWidgets.QPushButton()
color_button.setStyleSheet('QWidget {background-color: %s}' % color)
color_button.setFixedWidth(50)
color_button.clicked.connect(self.edit_category_item_color)
color_button.setObjectName('color')
# 删除
delete_button = QtWidgets.QPushButton()
delete_button.setText('delete')
delete_button.setFixedWidth(80)
delete_button.clicked.connect(self.remove_category_item)
if category == '__background__':
color_button.setEnabled(False)
delete_button.setEnabled(False)
layout.addWidget(category_label)
layout.addWidget(color_button)
layout.addWidget(delete_button)
widget.setLayout(layout)
return item, widget
def edit_category_item_color(self):
button = self.sender()
color = QtWidgets.QColorDialog.getColor()
if color.isValid():
button.setStyleSheet('QWidget {background-color: %s}' % (color.name()))
def remove_category_item(self):
button = self.sender()
row = self.category_list_widget.indexAt(button.parent().pos()).row()
self.category_list_widget.takeItem(row)
def load_cfg(self):
cfg = load_config(self.mainwindow.config_file)
self.category_list_widget.clear()
labels = cfg.get('label', [])
labels_key = [l.get('name') for l in labels]
if '__background__' not in labels_key:
print(labels)
labels.insert(0, {'name': '__background__', 'color': '#000000'})
if labels is not None:
for label in labels:
item, item_widget = self.get_item_and_widget(label.get('name', ''), color=label.get('color', '#00ff00'))
self.category_list_widget.addItem(item)
self.category_list_widget.setItemWidget(item, item_widget)
def add_new_category(self):
category = self.category_input.text()
color = self.color_button.palette().button().color().name()
if category:
item, item_widget = self.get_item_and_widget(category, color)
self.category_list_widget.addItem(item)
self.category_list_widget.setItemWidget(item, item_widget)
self.category_input.clear()
def choice_color(self):
color = QtWidgets.QColorDialog.getColor()
if color.isValid():
self.color_button.setStyleSheet('QWidget {background-color: %s}' % color.name())
def import_cfg(self):
file, _ = QtWidgets.QFileDialog.getOpenFileName(self, filter='Yaml File(*.yaml)')
if file:
self.mainwindow.config_file = file
self.mainwindow.actionSetting.setStatusTip("Config yaml: {}".format(file))
self.mainwindow.reload_cfg()
self.load_cfg()
def export_cfg(self):
file, _ = QtWidgets.QFileDialog.getSaveFileName(self, filter='Yaml File(*.yaml)')
if not file.endswith('.yaml'):
file += '.yaml'
if file:
self.mainwindow.save_cfg(file)
self.load_cfg()
def apply(self):
cfg = {}
cfg['label'] = []
for index in range(self.category_list_widget.count()):
item = self.category_list_widget.item(index)
widget = self.category_list_widget.itemWidget(item)
category_label = widget.findChild(QtWidgets.QLabel, 'category')
color_button = widget.findChild(QtWidgets.QPushButton, 'color')
cfg['label'].append(
{'name': category_label.text(), 'color': color_button.palette().button().color().name()})
save_config(cfg, self.mainwindow.config_file)
self.mainwindow.reload_cfg()
self.close()
def cache(self):
self.close()
def init_connect(self):
self.add_button.clicked.connect(self.add_new_category)
self.apply_button.clicked.connect(self.apply)
self.cache_button.clicked.connect(self.cache)
self.color_button.clicked.connect(self.choice_color)
self.pushButton_import.clicked.connect(self.import_cfg)
self.pushButton_export.clicked.connect(self.export_cfg)