132 lines
5.0 KiB
Python
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) |