فهرست منبع

许可管理器-更新软件许可文件程序编写

wanger 8 ماه پیش
والد
کامیت
eba1e42121

+ 132 - 0
processing/tools/PyQT5/License.py

@@ -0,0 +1,132 @@
+import sys
+import shutil
+from PyQt5.QtGui import QIcon
+from cryptography.fernet import Fernet
+from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog, QVBoxLayout, QLabel, QMessageBox
+
+
+class FileDialogExample(QWidget):
+    def __init__(self):
+        super().__init__()
+
+        # 设置窗口
+        self.setWindowTitle("许可更新管理器")
+        self.setGeometry(100, 100, 300, 150)
+
+        # 设置窗口图标
+        self.setWindowIcon(QIcon("icon.png"))  # 使用你自己的图标文件路径
+        self.resize(300, 120)
+        # 创建布局
+        layout = QVBoxLayout()
+
+        # 创建标签
+        self.label = QLabel("请选择一个许可文件", self)
+        self.label.setWordWrap(True)
+        layout.addWidget(self.label)
+
+        # 创建选择文件按钮
+        self.select_file_button = QPushButton("选择文件", self)
+        self.select_file_button.setFixedSize(60, 25)
+        self.select_file_button.clicked.connect(self.select_file)
+        layout.addWidget(self.select_file_button)
+
+        # 创建确定按钮
+        self.ok_button = QPushButton("确定", self)
+        self.ok_button.setFixedSize(60, 25)
+        self.ok_button.clicked.connect(self.ok_button_clicked)
+        layout.addWidget(self.ok_button)
+
+        # 设置窗口布局
+        self.setLayout(layout)
+
+    def copy_file(self, src_path, dst_path):
+        shutil.copy(src_path, dst_path)
+
+    def select_file(self):
+        # 打开文件对话框选择文件
+        options = QFileDialog.Options()
+        file, _ = QFileDialog.getOpenFileName(self, "选择文件", "", "Text Files (*.txt);;All Files (*)",
+                                              options=options)
+        if file:
+            print(file)
+            try:
+                self.selected_file = file  # 保存选择的文件路径
+                licensefile = file
+                # 打开文件并读取内容
+                text = []
+                with open(licensefile, 'r') as file:
+                    for line in file:
+                        text.append(line.replace('\n', ' '))
+                # 打印文件内容
+                print(text)
+                # 尝试执行的代码
+                fernet = Fernet(text[0].encode("utf-8"))
+                decrypted_message = fernet.decrypt(text[1].encode("utf-8"))
+                license = decrypted_message.decode('utf-8')
+                licenseDict = self.str_to_dict(license)
+                host = licenseDict["host"]
+                date = licenseDict["license"]
+                # QMessageBox.information(self, "提示信息", f"许可文件解析成功,授权机器名:{host},授权到期时间:{date}")
+                self.label.setStyleSheet("color: green;")  # 这里 #999999 是一种浅灰色
+                self.label.setText("许可文件解析成功,授权机器名:{},授权到期时间:{}。".format(host, date))
+            except Exception as e:
+                del self.selected_file  # 保存选择的文件路径
+                # 处理异常的代码
+                # QMessageBox.critical(None, 'Error', "许可文件解析失败,请检查!")
+                self.label.setStyleSheet("color: red;")  # 这里 #999999 是一种浅灰色
+                self.label.setText("许可文件解析失败,请检查!")
+
+    def ok_button_clicked(self):
+        # 执行业务逻辑
+        if hasattr(self, 'selected_file'):
+            licensefile = "license.txt"
+            self.copy_file(self.selected_file, licensefile)
+            # 打开文件并读取内容
+            # text = []
+            # with open(licensefile, 'r') as file:
+            #     for line in file:
+            #         text.append(line.replace('\n', ' '))
+            # # 打印文件内容
+            # print(text)
+            # # 尝试执行的代码
+            # fernet = Fernet(text[0].encode("utf-8"))
+            # decrypted_message = fernet.decrypt(text[1].encode("utf-8"))
+            # license = decrypted_message.decode('utf-8')
+            # licenseDict = self.str_to_dict(license)
+            # host = licenseDict["host"]
+            # date = licenseDict["license"]
+            # QMessageBox.information(self, "提示信息", f"许可文件更新成功,授权机器名:{host},授权到期时间:{date}")
+            QMessageBox.information(self, "提示信息", f"许可文件更新成功")
+            # # 假设这里是业务逻辑:读取文件内容
+            # try:
+            #     with open(self.selected_file, 'r') as f:
+            #         content = f.read()
+            #         print(f"文件内容: {content}")
+            # except Exception as e:
+            #     print(f"读取文件失败: {e}")
+        else:
+            QMessageBox.information(self, "提示信息", "请选择许可文件")
+
+    def str_to_dict(self, string):
+        # 去除首尾的花括号
+        string = string.strip("{}")
+        # 分割每个键值对
+        pairs = string.split(", ")
+        # 创建空字典
+        result = {}
+        # 遍历键值对并添加到字典中
+        for pair in pairs:
+            key, value = pair.split(": ")
+            # 去除键和值两边的引号
+            key = key.strip("'")
+            value = value.strip("'")
+            # 添加到字典中
+            result[key] = value
+        return result
+
+
+if __name__ == "__main__":
+    app = QApplication(sys.argv)
+    window = FileDialogExample()
+    window.show()
+    sys.exit(app.exec_())

BIN
processing/tools/PyQT5/icon.png


+ 2 - 0
processing/tools/PyQT5/license.txt

@@ -0,0 +1,2 @@
+ZLN6-FxsEKqGeOshAwWlt27tJBJHNlgsATZuwXBQp2s=
+gAAAAABnMX214r9t2Fdg9VAId-JFHulyuQRdHs7hvNGOZ2YdNxDTP7xxo-hU-3OPeacZwJ9JgSvDwlwfuH-vLOh-_ILjqoD2xEr2Bp79ZAMrv1cS4Nq6jIPDs-YqLNB5WD5WiD9ybgPXHRycNORzAlLaZkZVZXOr3g==

+ 90 - 0
processing/tools/QGS/CombinedDialog.py

@@ -0,0 +1,90 @@
+from qgis.PyQt.QtWidgets import QDialog, QVBoxLayout, QTabWidget, QTextEdit, QGraphicsView, QGraphicsScene
+from qgis.core import QgsProject, QgsMapLayer, QgsVectorLayer
+from qgis.gui import QgsMapCanvas, QgsAttributeTableView
+from qgis.utils import iface
+
+class CombinedDialog(QDialog):
+    def __init__(self, layer, parent=iface.mainWindow()):
+        super().__init__(parent)
+        self.layer = layer
+
+        # Set the dialog layout
+        self.setWindowTitle('Layer Information')
+        layout = QVBoxLayout(self)
+
+        # Create a QTabWidget to hold the different panels
+        self.tabs = QTabWidget(self)
+
+        # Add Metadata Panel (using QgsVectorLayer methods to get metadata)
+        metadata_panel = QTextEdit(self)  # TextEdit for displaying metadata
+        metadata_text = self.get_layer_metadata(self.layer)
+        metadata_panel.setPlainText(metadata_text)  # Set the metadata text content
+        self.tabs.addTab(metadata_panel, 'Metadata')
+
+        # Add Preview Panel (using QgsMapCanvas in a QGraphicsView)
+        preview_widget = QGraphicsView(self)
+        preview_scene = QGraphicsScene(self)
+        preview_widget.setScene(preview_scene)
+
+        # Set up the map canvas for previewing the layer
+        map_canvas = QgsMapCanvas()
+        map_canvas.setCanvasColor('white')
+        map_canvas.setDestinationCrs(self.layer.crs())  # Set the CRS of the map canvas
+        map_canvas.setExtent(self.layer.extent())  # Set the extent to match the layer's extent
+        map_canvas.setLayers([self.layer])  # Set the layer to be previewed
+        map_canvas.refresh()  # Refresh the map canvas to show the layer
+
+        # Add the map canvas to the preview scene
+        preview_scene.addWidget(map_canvas)
+        self.tabs.addTab(preview_widget, 'Preview')
+
+        # Add Attribute Table Panel (using QgsAttributeTableView)
+        attribute_table = QgsAttributeTableView()
+        attribute_table.setLayer(self.layer)
+        self.tabs.addTab(attribute_table, 'Attribute Table')
+
+        # Add the QTabWidget to the layout
+        layout.addWidget(self.tabs)
+
+        # Set dialog size
+        self.resize(800, 600)
+
+    def get_layer_metadata(self, layer):
+        """Return basic metadata information of the layer"""
+        metadata = []
+
+        # Get layer name
+        metadata.append(f"Layer Name: {layer.name()}")
+
+        # Get layer type
+        metadata.append(f"Layer Type: {layer.type()}")
+
+        # Get CRS (Coordinate Reference System)
+        metadata.append(f"CRS: {layer.crs().authid()}")
+
+        # Get feature count
+        metadata.append(f"Feature Count: {layer.featureCount()}")
+
+        # Get fields (attribute names)
+        fields = ", ".join([field.name() for field in layer.fields()])
+        metadata.append(f"Fields: {fields}")
+
+        # Get extent
+        metadata.append(f"Extent: {layer.extent().toString()}")
+
+        return "\n".join(metadata)
+
+    def showDialog(self):
+        self.exec_()
+
+
+# Usage:
+# layer = iface.activeLayer()  # Get the active layer
+layer = QgsVectorLayer(
+            "dbname='real3d' host=localhost port=5432 user='postgres' password='postgres' sslmode=disable checkPrimaryKeyUnicity='1' table=\"vector\".\"ghdka\" (geom)",
+            'test', 'postgres')
+if layer:
+    dialog = CombinedDialog(layer)
+    dialog.showDialog()
+else:
+    print("No layer selected")

BIN
processing/tools/QGS/symbology-style.db