123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962 |
- # ///////////////////////////////////////////////////////////////
- #
- # BY: WANDERSON M.PIMENTA
- # PROJECT MADE WITH: Qt Designer and PySide6
- # V: 1.0.0
- #
- # This project can be used freely for all uses, as long as they maintain the
- # respective credits only in the Python scripts, any information in the visual
- # interface (GUI) can be modified without any implication.
- #
- # There are limitations on Qt licenses if you want to use your products
- # commercially, I recommend reading them on the official website:
- # https://doc.qt.io/qtforpython/licenses.html
- #
- # ///////////////////////////////////////////////////////////////
-
- from PySide6.QtWidgets import QFileDialog,QWidget, QVBoxLayout, QTreeWidget, QApplication, QTreeWidgetItem
- from PySide6.QtCore import Signal, Qt, Slot, QObject
- from PySide6.QtSql import QSqlTableModel,QSqlDatabase
- import sqlite3
- from PySide6.QtGui import QIcon
-
-
- import sys
- import os
- import platform
-
- from tkinter import messagebox
-
- # IMPORT / GUI AND MODULES AND WIDGETS
- # ///////////////////////////////////////////////////////////////
- from modules import *
- from widgets import *
-
- os.environ["QT_FONT_DPI"] = "96" # FIX Problem for High DPI and Scale above 100%
-
- # SET AS GLOBAL WIDGETS
- # ///////////////////////////////////////////////////////////////
- widgets = None
- excelname = ''
-
- # 获取项目根目录
- project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
- # 将项目根目录添加到 sys.path
- sys.path.append(project_root)
-
-
- # 表格的模型
- class MyTableModel(QAbstractTableModel):
- def __init__(self, data):
- super().__init__()
- self._data = data
-
- # 重新定义行数
- def rowCount(self, parent=QModelIndex()):
- return len(self._data)
-
- # 重新定义列数
- def columnCount(self, parent=QModelIndex()):
- return len(self._data[0]) if self._data else 0
-
- # 重新定义数据
- def data(self, index, role=Qt.DisplayRole):
- if not index.isValid():
- return None
- if role == Qt.DisplayRole:
- return self._data[index.row()][index.column()]
- return None
-
- class TreeWidgetItem:
- def __init__(self, id: any, parent_id: any, name: str,icon: QIcon = None, extend: object = None):
- """
- 菜单数据接口
- :param id: ID
- :param parent_id: 父ID
- :param name: 菜单名称
- :param icon: 图标
- :param extend: 扩展数据
- """
- self.id: any = id
- self.parent_id: any = parent_id
- self.name: str = name
- self.extend: object = extend
- # 实例化
- self.treeWidgetItem = QTreeWidgetItem([self.name])
- # 存储相关数据
- self.treeWidgetItem.setData(0, Qt.UserRole + 1,extend )
- self.treeWidgetItem.setIcon(0, QIcon(':/icons/default.png'))
- if icon is not None:
- self.treeWidgetItem.setIcon(0, icon)
-
- class ElTreeData(QObject):
- """
- Data Model
- """
- items_changed: Signal = Signal(str)
- styleSheet_changed: Signal = Signal(str)
-
- def __init__(self, items: list[TreeWidgetItem] = None, styleSheet: str = None):
- super(ElTreeData, self).__init__()
- # 定义数据
- self._items: list[TreeWidgetItem]
- self._styleSheet: str
- # 初始化数据
- self.items = items
- self.styleSheet = styleSheet
-
- @property
- def items(self):
- return self._items
-
- @items.setter
- def items(self, value):
- self._items = value
- # 数据改变时发出信号
- self.items_changed.emit(self.items)
-
- @property
- def styleSheet(self):
- return self._styleSheet
-
- @styleSheet.setter
- def styleSheet(self, value):
- self._styleSheet = value
- # 数据改变时发出信号
- self.styleSheet_changed.emit(self.styleSheet)
-
- #全数据库
- class ElTree(QWidget):
- """
- Control
- """
- itemClicked: Signal = Signal(object)
- itemDoubleClicked: Signal = Signal(object)
-
- def __init__(self, treeData: ElTreeData, parent=None):
- super(ElTree, self).__init__(parent=parent)
-
- self.data = treeData
- # 将按钮的点击信号绑定到当前类的点击信号
- widgets.allTreeWidget.itemClicked.connect(lambda item: self.itemClicked.emit(item.data(0, Qt.UserRole + 1)))
- widgets.allTreeWidget.itemDoubleClicked.connect(lambda item: self.itemDoubleClicked.emit(item.data(0, Qt.UserRole + 1)))
- self.__render_items(True)
-
- def __render_items(self, is_clear: bool):
- if is_clear:
- widgets.allTreeWidget.clear()
- widgets.qureyTreeWidget.clear()
- widgets.allTreeWidget.setColumnCount(1)
- widgets.allTreeWidget.setHeaderHidden(True)
- widgets.qureyTreeWidget.setColumnCount(1)
- widgets.qureyTreeWidget.setHeaderHidden(True)
- if self.data.items is not None:
- # 转为字典
- mapping: dict[any, TreeWidgetItem] = dict(zip([i.id for i in self.data.items], self.data.items))
- # 树容器
- treeWidgetItems: list[QTreeWidgetItem] = []
- for d in self.data.items:
- # 如果找不到父级项,则是根节点
- parent: TreeWidgetItem = mapping.get(d.parent_id)
- if parent is None:
- treeWidgetItems.append(d.treeWidgetItem)
- else:
- parent.treeWidgetItem.addChild(d.treeWidgetItem)
-
- # 挂载到树上
- widgets.allTreeWidget.insertTopLevelItems(0, treeWidgetItems)
-
- #查询
- class ElTree1(QWidget):
- """
- Control
- """
- itemClicked: Signal = Signal(object)
- itemDoubleClicked: Signal = Signal(object)
-
- def __init__(self, treeData: ElTreeData, parent=None):
- super(ElTree1, self).__init__(parent=parent)
- self.data = treeData
- # 将按钮的点击信号绑定到当前类的点击信号
- widgets.qureyTreeWidget.itemClicked.connect(lambda item: self.itemClicked.emit(item.data(0, Qt.UserRole + 1)))
- widgets.qureyTreeWidget.itemDoubleClicked.connect(lambda item: self.itemDoubleClicked.emit(item.data(0, Qt.UserRole + 1)))
- self.__render_items(True)
-
- def __render_items(self, is_clear: bool):
- if is_clear:
- widgets.qureyTreeWidget.clear()
- widgets.qureyTreeWidget.setColumnCount(1)
- widgets.qureyTreeWidget.setHeaderHidden(True)
- if self.data.items is not None:
- # 转为字典
- mapping: dict[any, TreeWidgetItem] = dict(zip([i.id for i in self.data.items], self.data.items))
- # 树容器
- treeWidgetItems: list[QTreeWidgetItem] = []
- for d in self.data.items:
- # 如果找不到父级项,则是根节点
- parent: TreeWidgetItem = mapping.get(d.parent_id)
- if parent is None:
- treeWidgetItems.append(d.treeWidgetItem)
- else:
- parent.treeWidgetItem.addChild(d.treeWidgetItem)
-
- # 挂载到树上
- widgets.qureyTreeWidget.insertTopLevelItems(0, treeWidgetItems)
-
- class MainWindow(QMainWindow):
- def __init__(self):
- QMainWindow.__init__(self)
- # super().__init__()
- # SET AS GLOBAL WIDGETS
- # ///////////////////////////////////////////////////////////////
- self.ui = Ui_MainWindow()
- self.ui.setupUi(self)
- # self.comboBox_2 = QComboBox(self)
- # ...此处为省略代码...
- global widgets
- widgets = self.ui
-
- # 是否使用系统自带标题栏 True是不使用,False使用
- # ///////////////////////////////////////////////////////////////
- Settings.ENABLE_CUSTOM_TITLE_BAR = True
-
- # APP名称
- # ///////////////////////////////////////////////////////////////
- title = "控制网复测平面基准归算程序"
- description = "控制网复测平面基准归算程序"
- # APPLY TEXTS
- self.setWindowTitle(title)
- widgets.titleRightInfo.setText(description)
-
- # TOGGLE MENU
- # ///////////////////////////////////////////////////////////////
- widgets.toggleButton.clicked.connect(lambda: UIFunctions.toggleMenu(self, True))
-
- # SET UI DEFINITIONS
- # ///////////////////////////////////////////////////////////////
- UIFunctions.uiDefinitions(self)
-
- # QTableWidget PARAMETERS
- # ///////////////////////////////////////////////////////////////
- # widgets.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
-
- # 点击事件
- # ///////////////////////////////////////////////////////////////
-
- # 左边菜单
- # 首页
- widgets.btn_home.clicked.connect(self.buttonClick)
- # 输入表格
- widgets.btn_widgets.clicked.connect(self.buttonClick)
- # 成果预览
- widgets.btn_new.clicked.connect(self.buttonClick)
- # 数据一览
- widgets.btn_data.clicked.connect(self.buttonClick)
- # 皮肤切换
- widgets.btn_message.clicked.connect(self.buttonClick)
- # 打开上传文件夹
- widgets.upload.clicked.connect(self.buttonClick)
-
-
- # 拓展左侧栏
- # def openCloseLeftBox():
- # UIFunctions.toggleLeftBox(self, True)
- # widgets.toggleLeftBox.clicked.connect(openCloseLeftBox)
- # widgets.extraCloseColumnBtn.clicked.connect(openCloseLeftBox)
-
- # EXTRA RIGHT BOX
- def openCloseRightBox():
- UIFunctions.toggleRightBox(self, True)
-
- widgets.settingsTopBtn.clicked.connect(openCloseRightBox)
-
-
-
-
- # 展示APP
- # ///////////////////////////////////////////////////////////////
- self.show()
-
- # 设置主题
- # ///////////////////////////////////////////////////////////////
- if getattr(sys, 'frozen', False):
- absPath = os.path.dirname(os.path.abspath(sys.executable))
- elif __file__:
- absPath = os.path.dirname(os.path.abspath(__file__))
- useCustomTheme = True
- self.useCustomTheme = useCustomTheme
- self.absPath = absPath
- # themeFile = r"Front\themes\py_dracula_light.qss"
- themeFile = os.path.abspath(os.path.join(self.absPath, "themes/py_dracula_light.qss"))
-
- # 设置主题和HACKS
- if useCustomTheme:
- # LOAD AND APPLY STYLE
- UIFunctions.theme(self, themeFile, True)
-
- # SET HACKS
- AppFunctions.setThemeHack(self)
-
- # 设置主页和选择菜单
- # ///////////////////////////////////////////////////////////////
- widgets.stackedWidget.setCurrentWidget(widgets.home)
- widgets.btn_home.setStyleSheet(UIFunctions.selectMenu(widgets.btn_home.styleSheet()))
-
- #初始化树状数据库
- tree_button = self.sql_init()
- tree_button.itemClicked.connect(lambda extend: print("单击->扩展数据为:", extend))
- tree_button.itemDoubleClicked.connect(lambda extend: print("双击->扩展数据为:", extend))
-
- self.bind()
-
- #绑定组件
- def bind(self):
- # 计算
- widgets.compute.clicked.connect(self.computeClick)
- widgets.search.clicked.connect(self.searchClick)
-
- #删除tableview
- def delete_table_view(table_view):
- table_view.setParent(None)
- table_view.deleteLater()
-
- #默认第一个参数是self,所以使用时只有一个参数
- #稳定性成果表
- def Arrange_Data(self,list1):
- #最终return的
- list2 = []
- #点号部分
- nlist = []
- for data1 in list1:
- #点名
- #存每一行的数据
- resultlist = []
- pn = data1[0].decode('utf-8')
- resultlist.append(pn)
- nlist.append(pn)
- resultlist.append(data1[1])
- resultlist.append(data1[2])
- resultlist.append(data1[3])
- resultlist.append(data1[4])
- resultlist.append(data1[5])
- resultlist.append(data1[6])
- resultlist.append(data1[7])
- resultlist.append(data1[8])
- resultlist.append(data1[9])
- resultlist.append(data1[10])
- resultlist.append(data1[11])
- #判定1
- an1 = data1[12].decode('utf-8')
- resultlist.append(an1)
- resultlist.append(data1[13])
- resultlist.append(data1[14])
- resultlist.append(data1[15])
- #判定2
- an2 = data1[16].decode('utf-8')
- resultlist.append(an2)
- list2.append(resultlist)
-
- return nlist,list2
-
- #复测成果表
- def Arrange_Data1(self,list1):
- #最终return的
- list2 = []
- #点号部分
- nlist = []
- for data1 in list1:
- #点名
- #存每一行的数据
- resultlist = []
- pn = data1[0].decode('utf-8')
- resultlist.append(pn)
- nlist.append(pn)
- resultlist.append(data1[1])
- resultlist.append(data1[2])
- resultlist.append(data1[3])
- resultlist.append(data1[4])
- resultlist.append(data1[5])
- resultlist.append(data1[6])
- resultlist.append(data1[7])
- #判定
- an1 = data1[8].decode('utf-8')
- resultlist.append(an1)
- list2.append(resultlist)
-
- return nlist,list2
-
- #基准归算表
- def Arrange_Data2(self,list1):
- #最终return的
- list2 = []
- #点号部分
- nlist = []
- for data1 in list1:
- #点名
- #存每一行的数据
- resultlist = []
- pn = data1[0].decode('utf-8')
- resultlist.append(pn)
- nlist.append(pn)
- resultlist.append(data1[1])
- resultlist.append(data1[2])
- resultlist.append(data1[3])
- resultlist.append(data1[4])
- resultlist.append(data1[5])
- #判定
- an1 = data1[6].decode('utf-8')
- resultlist.append(an1)
- list2.append(resultlist)
-
- return nlist,list2
-
- #稳定性成果表
- def Data_in_Cell(self,list1):
- model = QStandardItemModel()
- xx = 0
- while xx < len(list1):
- data1 = list1[xx]
- #点号
- cell1 = str(data1[0])
- item = QStandardItem(cell1)
- model.setItem(xx, 0, item)
- #首期
- cell1 = str(round(data1[1],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 1, item)
- cell1 = str(round(data1[2],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 2, item)
- #上期
- cell1 = str(round(data1[3],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 3, item)
- cell1 = str(round(data1[4],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 4, item)
- #权
- cell1 = str(int(data1[5]))
- item = QStandardItem(cell1)
- model.setItem(xx, 5, item)
- #本期
- cell1 = str(round(data1[6],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 6, item)
- cell1 = str(round(data1[7],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 7, item)
- #权
- cell1 = str(int(data1[8]))
- item = QStandardItem(cell1)
- model.setItem(xx, 8, item)
- #本-首
- cell1 = str(round(data1[9],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 9, item)
- cell1 = str(round(data1[10],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 10, item)
- cell1 = str(round(data1[11],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 11, item)
- #判定(如果是稳定则不显示)
- cell1 = str(data1[12])
- if cell1 == '稳定':
- cell1 = ''
- item = QStandardItem(cell1)
- model.setItem(xx, 12, item)
- #本-上
- cell1 = str(round(data1[13],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 13, item)
- cell1 = str(round(data1[14],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 14, item)
- cell1 = str(round(data1[15],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 15, item)
- #判定
- cell1 = str(data1[16])
- if cell1 == '稳定':
- cell1 = ''
- item = QStandardItem(cell1)
- model.setItem(xx, 16, item)
- xx = xx + 1
- return model
-
- #复测成果表
- def Data_in_Cell1(self,list1):
- model = QStandardItemModel()
- xx = 0
- while xx < len(list1):
- data1 = list1[xx]
- #点号
- cell1 = str(data1[0])
- item = QStandardItem(cell1)
- model.setItem(xx, 0, item)
- #上期
- cell1 = str(round(data1[1],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 1, item)
- cell1 = str(round(data1[2],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 2, item)
- #本期
- cell1 = str(round(data1[3],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 3, item)
- cell1 = str(round(data1[4],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 4, item)
- #上-本
- cell1 = str(round(data1[5],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 5, item)
- cell1 = str(round(data1[6],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 6, item)
- cell1 = str(round(data1[7],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 7, item)
- #判定(如果是稳定则不显示)
- cell1 = str(data1[8])
- if cell1 == '稳定':
- cell1 = ''
- item = QStandardItem(cell1)
- model.setItem(xx, 8, item)
- xx = xx + 1
- return model
-
- #基准归算表
- def Data_in_Cell2(self,list1):
- model = QStandardItemModel()
- xx = 0
- while xx < len(list1):
- data1 = list1[xx]
- #点号
- cell1 = str(data1[0])
- item = QStandardItem(cell1)
- model.setItem(xx, 0, item)
- #计算
- cell1 = str(round(data1[1],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 1, item)
- cell1 = str(round(data1[2],4))
- item = QStandardItem(cell1)
- model.setItem(xx, 2, item)
- #上-计
- cell1 = str(round(data1[3],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 3, item)
- cell1 = str(round(data1[4],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 4, item)
- cell1 = str(round(data1[5],1))
- item = QStandardItem(cell1)
- model.setItem(xx, 5, item)
- #判定(如果是稳定则不显示)
- cell1 = str(data1[6])
- if cell1 == '稳定':
- cell1 = ''
- item = QStandardItem(cell1)
- model.setItem(xx, 6, item)
- xx = xx + 1
- return model
-
- #设一个全局变量,存数据库中所有的包含内容(数据库-三种方法-表)
- dblist = []
- #初始化数据一览(数据库全展示)
- def sql_init(self):
- #初始化全部数据库
- # inpath = r'D:\4work_now\20240819GS\20241211\SQL'
- inpath = os.path.abspath('../SQL')
- #读取所有的数据库名
- sqlitem = []
- id = 1
- for filename in os.listdir(inpath):
- #数据库
- dbname = filename.split('.',-1)[0]
- dbpath = os.path.join(inpath,filename)
- sqlitem.append(TreeWidgetItem(id,0,dbname,icon=QIcon(os.path.abspath(os.path.join(self.absPath, "images/icons/cil-clone.png")))))
- pid = id
- id = id + 1
- #三种方法
- sqlitem.append(TreeWidgetItem(id, pid, '水准测段高差稳定计算', icon=QIcon(os.path.join(self.absPath, "images/icons/cil-description.png"))))
- gcid = id
- id = id + 1
- sqlitem.append(TreeWidgetItem(id, pid, '控制网复测平面基准计算', icon=QIcon(os.path.join(self.absPath, "images/icons/cil-description.png"))))
- gsid = id
- id = id + 1
- sqlitem.append(TreeWidgetItem(id, pid, '平面控制网稳定性计算', icon=QIcon(os.path.join(self.absPath, "images/icons/cil-description.png"))))
- wdid = id
- id = id + 1
- #读取所有的表名(三种方式往下)
- db1 = sqlite3.connect(dbpath)
- #获取游标
- cursor1 = db1.cursor()
- sqlstr1 = 'SELECT TableName FROM GC_Input_Param;'
- cursor1.execute(sqlstr1)
- result1 = cursor1.fetchall()
- for re1 in result1:
- str1 = re1[0].decode('utf-8')
- list1 = []
- list1.append(dbname)
- list1.append('水准测段高差稳定计算')
- list1.append(str1)
- self.dblist.append(list1)
- sqlitem.append(TreeWidgetItem(id, gcid, str1, icon=QIcon(
- os.path.join(self.absPath, "images/icons/cil-file.png")),extend={'listData': list1}))
- id = id + 1
- sqlstr2 = 'SELECT TableName FROM GS_Input_Param;'
- cursor1.execute(sqlstr2)
- result2 = cursor1.fetchall()
- for re2 in result2:
- str2 = re2[0].decode('utf-8')
- list2 = []
- list2.append(dbname)
- list2.append('控制网复测平面基准计算')
- list2.append(str2)
- self.dblist.append(list2)
- sqlitem.append(TreeWidgetItem(id, gsid, str2, icon=QIcon(os.path.join(self.absPath, "images/icons/cil-file.png")),extend={'listData': list2}))
- id = id + 1
- sqlstr3 = 'SELECT TableName FROM WD_Input_Param;'
- cursor1.execute(sqlstr3)
- result3 = cursor1.fetchall()
- for re3 in result3:
- str3 = re3[0].decode('utf-8')
- list3 = []
- list3.append(dbname)
- list3.append('平面控制网稳定性计算')
- list3.append(str3)
- self.dblist.append(list3)
- sqlitem.append(TreeWidgetItem(id, wdid, str3, icon=QIcon(os.path.join(self.absPath, "images/icons/cil-file.png")),extend={'listData': list3}))
- id = id + 1
- button = ElTree(ElTreeData(sqlitem))
- return button
-
- #关键词查询
- def searchClick(self):
- # GET BUTTON CLICKED
- btn = self.sender()
- btnName = btn.objectName()
- #获取文本
- text1 = self.ui.lineEdit_2.text()
- #符合的list
- fhlist = []
- #查询(待优化)
- for list1 in self.dblist:
- for li in list1:
- if text1 in li:
- fhlist.append(list1)
- break
- #更新item值
- sqlitem = []
- #前两层是否一致
- str1 = ''
- str2 = ''
- id = 1
- pid = 0
- fid = 0
- zdy = []
- for list2 in fhlist:
- dbname = list2[0]
- if dbname != str1:
- str1 = dbname
- pid = id
- str2 = ''
- sqlitem.append(TreeWidgetItem(id, 0, dbname, icon=QIcon(
- os.path.join(self.absPath, "images/icons/cil-clone.png"))))
- zdy1 = []
- zdy1.append(id)
- zdy1.append(0)
- zdy1.append(dbname)
- zdy.append(zdy1)
- id = id + 1
- mename = list2[1]
- if mename != str2:
- str2 = mename
- fid = id
- sqlitem.append(TreeWidgetItem(id, pid, mename, icon=QIcon(
- os.path.join(self.absPath, "images/icons/cil-description.png"))))
- zdy1 = []
- zdy1.append(id)
- zdy1.append(pid)
- zdy1.append(mename)
- zdy.append(zdy1)
- id = id + 1
- sqlitem.append(TreeWidgetItem(id, fid, list2[2], icon=QIcon(
- os.path.join(self.absPath, "images/icons/cil-file.png")), extend={'listData': list2}))
- zdy1 = []
- zdy1.append(id)
- zdy1.append(fid)
- zdy1.append(list2[2])
- zdy.append(zdy1)
- id = id + 1
- search_button = ElTree1(ElTreeData(sqlitem))
- search_button.itemClicked.connect(lambda extend: print("单击->扩展数据为:", extend))
- search_button.itemDoubleClicked.connect(lambda extend: print("双击->扩展数据为:", extend))
-
- #直接这个基础上改点选输出表格(未改)
- def computeClick(self):
- # GET BUTTON CLICKED
- btn = self.sender()
- btnName = btn.objectName()
- #处理选中的文件
- # print(file_path)
- UIFunctions.compute_show_process_excel_file(self, file_path)
- current_text = self.ui.comboBox_2.currentText()
- db_path = r"D:\4work_now\20240819GS\ControlNetwork\ControlNetwork\UI\SQL\DataBase.db"
- #转换下
- excelname = os.path.basename(file_path)
- utf_en = excelname.encode('utf-8')
- # file_path = file_path
- if current_text == "水准测段高差稳定计算":
- #只显示一个tab
- self.ui.tabWidget.setTabVisible(0,True)
- self.ui.tabWidget.setTabVisible(1,False)
- self.ui.tabWidget.setTabVisible(2,False)
- #重新设置文字名称
- self.ui.tabWidget.setTabText(0,'测段高差计算表')
-
- # 计算结束自动跳转结果页面,并保留查询内容,以便输出
- widgets.stackedWidget.setCurrentWidget(widgets.new_page) # SET PAGE
- UIFunctions.resetStyle(self, btnName) # RESET ANOTHERS BUTTONS SELECTED
- btn.setStyleSheet(UIFunctions.selectMenu(btn.styleSheet())) # SELECT MENU
- elif current_text == "控制网复测平面基准计算":
- #就用已有的选项卡
- self.ui.tabWidget.setTabVisible(0,True)
- self.ui.tabWidget.setTabVisible(1,True)
- self.ui.tabWidget.setTabVisible(2,True)
- #重新设置文字名称
- self.ui.tabWidget.setTabText(0,'复测成果表')
- self.ui.tabWidget.setTabText(1,'基准归算模型')
- self.ui.tabWidget.setTabText(2,'复测基准归算表')
-
- #链接数据库并显示
- # 连接到数据库
- #将结果输出到数据库
- db1 = sqlite3.connect(db_path)
- #获取游标
- cursor1 = db1.cursor()
- #查询表内符合的所有数据(分成两个结果分别显示)
- #复测成果表
- sqlstr1 = 'select PointName,Last_X,Last_Y,Result_X,Result_Y,Last_ResultX,Last_ResultY,Last_ResultP,Dis_Ass from GS_Result_Point WHERE TableName = ?'
- cursor1.execute(sqlstr1,(utf_en,))
- #获取结果集
- result1 = cursor1.fetchall()
- #基准归算表
- sqlstr11 = 'select PointName,Cal_X,Cal_Y,Last_CalX,Last_CalY,Last_CalP,Dis_Ass from GS_Result_Point WHERE TableName = ?'
- cursor1.execute(sqlstr11,(utf_en,))
- #获取结果集
- result2 = cursor1.fetchall()
- #对结果集进行处理,把汉字转换过来,添加表头部分
- nlist1,plist1 = self.Arrange_Data1(result1)
- nlist2,plist2 = self.Arrange_Data2(result2)
- # 创建一个数据模型(复测成果表)
- self.model1 = QStandardItemModel()
- #把数据放进去
- model1 = self.Data_in_Cell1(plist1)
- model2 = self.Data_in_Cell2(plist2)
- #设置表头
- model1.setHorizontalHeaderLabels(['点名', '前期X','前期Y','本期X', '本期Y','前期-本期X','前期-本期Y','前期-本期P','位移判定'])
- model1.setVerticalHeaderLabels(nlist1)
- #QTableView并将数据模型与之关联
- self.ui.resultTableView.setModel(model1)
- self.ui.resultTableView.show()
- #设置表头
- model2.setHorizontalHeaderLabels(['点名', '基准归算X','基准归算Y','前期-归算X','前期-归算Y','前期-归算P','位移判定'])
- model2.setVerticalHeaderLabels(nlist2)
- #QTableView并将数据模型与之关联
- self.ui.reconTableView.setModel(model2)
- self.ui.reconTableView.show()
-
- #富文本的html
- sqlstr2 = 'select Last_ResultName,New_ResultName,Formula_X1,Formula_X2,Formula_X3,Formula_Y1,Formula_Y2,Formula_Y3 from GS_Trans_Param WHERE TableName = ?'
- cursor1.execute(sqlstr2,(utf_en,))
- #获取结果集
- result1 = cursor1.fetchall()
- str1 = result1[0][0].decode('utf-8')
- str2 = result1[0][1].decode('utf-8')
- n1 = result1[0][2]
- n2 = result1[0][3]
- n3 = result1[0][4]
- n4 = result1[0][5]
- n5 = result1[0][6]
- n6 = result1[0][7]
- str0 = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
- <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css">
- p, li { white-space: pre-wrap; }
- hr { height: 1px; border-width: 0; }
- li.unchecked::marker { content: "\2610"; }
- li.checked::marker { content: "\2612"; }
- </style></head><body style=" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;">
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; color:#000000;">"""+str2+"""--"""+str1+"""</span><span style=" font-size:14pt;">已知系统转换公式:</span></p>
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:700;">X</span><span style=" font-size:14pt;">=(</span><span style=" font-size:14pt; color:#aa0000;">"""+str(n1)+"""</span><span style=" font-size:14pt;">)</span><span style=" font-size:14pt; font-weight:700;">x</span><span style=" font-size:14pt;">+(</span><span style=" font-size:14pt; color:#00aa00;">"""+str(n2)+"""</span><span style=" font-size:14pt;">)</span><span style=" font-size:14pt; font-weight:700;">y</span><span style=" font-size:14pt;">+(</span><span style=" font-size:14pt; color:#00007f;">"""+str(n3)+"""</span><span style=" font-size:14pt;">)</span></p>
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:700;">Y</span><span style=" font-size:14pt;">=(</span><span style=" font-size:14pt; color:#aa0000;">"""+str(n4)+"""</span><span style=" font-size:14pt;">)</span><span style=" font-size:14pt; font-weight:700;">x</span><span style=" font-size:14pt;">+(</span><span style=" font-size:14pt; color:#00aa00;">"""+str(n5)+"""</span><span style=" font-size:14pt;">)</span><span style=" font-size:14pt; font-weight:700;">y</span><span style=" font-size:14pt;">+(</span><span style=" font-size:14pt; color:#00007f;">"""+str(n6)+"""</span><span style=" font-size:14pt;">)</span></p>
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;">式中:</span><span style=" font-size:14pt; font-weight:700; color:#000000;">x、y</span><span style=" font-size:14pt;">为</span><span style=" font-size:14pt; color:#000000;">"""+str2+"""</span><span style=" font-size:14pt;">坐标;</span></p>
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;"> </span><span style=" font-size:14pt; font-weight:700;">X、Y</span><span style=" font-size:14pt;">为"""+str1+"""已知系统的"""+str2+"""归算坐标。</span></p></body></html>"""
- self.ui.printTableView.setHtml(str0)
-
- # 计算结束自动跳转结果页面,并保留查询内容,以便输出
- widgets.stackedWidget.setCurrentWidget(widgets.new_page) # SET PAGE
- UIFunctions.resetStyle(self, btnName) # RESET ANOTHERS BUTTONS SELECTED
- btn.setStyleSheet(UIFunctions.selectMenu(btn.styleSheet())) # SELECT MENU
- # GS.main_function(file_path, db_path)
- # 添加控制网执行代码
- elif current_text=="平面控制网稳定性计算":
- #只显示头两个tab
- self.ui.tabWidget.setTabVisible(0,True)
- self.ui.tabWidget.setTabVisible(1,True)
- self.ui.tabWidget.setTabVisible(2,False)
- #重新设置文字名称
- self.ui.tabWidget.setTabText(0,'稳定性分析成果表')
- self.ui.tabWidget.setTabText(1,'自由网成果归算模型')
- #链接数据库并显示
- # 连接到数据库
- #将结果输出到数据库
- db1 = sqlite3.connect(db_path)
- #获取游标
- cursor1 = db1.cursor()
- #查询表内符合的所有数据
- sqlstr1 = 'select PointName,First_X,First_Y,Last_X,Last_Y,Last_Wight,Result_X,Result_Y,New_Wight,New_FirstX,New_FirstY,New_FirstP,NFDis_Ass,New_LastX,New_LastY,New_LastP,NLDis_Ass from WD_Result_Point WHERE TableName = ?'
- cursor1.execute(sqlstr1,(utf_en,))
- #获取结果集
- result = cursor1.fetchall()
- #对结果集进行处理,把汉字转换过来,添加表头部分
- nlist,plist = self.Arrange_Data(result)
- # 创建一个数据模型
- self.model = QStandardItemModel()
- #把数据放进去
- model1 = self.Data_in_Cell(plist)
- #设置表头
- model1.setHorizontalHeaderLabels(['点名', '首期X','首期Y','上期X', '上期Y','权','本期X','本期Y','权','本期-首期X','本期-首期Y','本期-首期P','位移判定', '本期-上期X','本期-上期Y','本期-上期P','位移判定'])
- model1.setVerticalHeaderLabels(nlist)
- #QTableView并将数据模型与之关联
- self.ui.resultTableView.setModel(model1)
- self.ui.resultTableView.show()
-
- #富文本的html
- sqlstr2 = 'select Last_ResultName,New_ResultName,Formula_X1,Formula_X2,Formula_X3,Formula_Y1,Formula_Y2,Formula_Y3 from WD_Result_Param WHERE TableName = ?'
- cursor1.execute(sqlstr2,(utf_en,))
- #获取结果集
- result1 = cursor1.fetchall()
- str1 = result1[0][0].decode('utf-8')
- str2 = result1[0][1].decode('utf-8')
- n1 = result1[0][2]
- n2 = result1[0][3]
- n3 = result1[0][4]
- n4 = result1[0][5]
- n5 = result1[0][6]
- n6 = result1[0][7]
- str0 = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
- <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css">
- p, li { white-space: pre-wrap; }
- hr { height: 1px; border-width: 0; }
- li.unchecked::marker { content: "\2610"; }
- li.checked::marker { content: "\2612"; }
- </style></head><body style=" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;">
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; color:#000000;">"""+str2+"""--"""+str1+"""</span><span style=" font-size:14pt;">已知系统转换公式:</span></p>
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:700;">X</span><span style=" font-size:14pt;">=(</span><span style=" font-size:14pt; color:#aa0000;">"""+str(n1)+"""</span><span style=" font-size:14pt;">)</span><span style=" font-size:14pt; font-weight:700;">x</span><span style=" font-size:14pt;">+(</span><span style=" font-size:14pt; color:#00aa00;">"""+str(n2)+"""</span><span style=" font-size:14pt;">)</span><span style=" font-size:14pt; font-weight:700;">y</span><span style=" font-size:14pt;">+(</span><span style=" font-size:14pt; color:#00007f;">"""+str(n3)+"""</span><span style=" font-size:14pt;">)</span></p>
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:700;">Y</span><span style=" font-size:14pt;">=(</span><span style=" font-size:14pt; color:#aa0000;">"""+str(n4)+"""</span><span style=" font-size:14pt;">)</span><span style=" font-size:14pt; font-weight:700;">x</span><span style=" font-size:14pt;">+(</span><span style=" font-size:14pt; color:#00aa00;">"""+str(n5)+"""</span><span style=" font-size:14pt;">)</span><span style=" font-size:14pt; font-weight:700;">y</span><span style=" font-size:14pt;">+(</span><span style=" font-size:14pt; color:#00007f;">"""+str(n6)+"""</span><span style=" font-size:14pt;">)</span></p>
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;">式中:</span><span style=" font-size:14pt; font-weight:700; color:#000000;">x、y</span><span style=" font-size:14pt;">为</span><span style=" font-size:14pt; color:#000000;">"""+str2+"""</span><span style=" font-size:14pt;">坐标;</span></p>
- <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;"> </span><span style=" font-size:14pt; font-weight:700;">X、Y</span><span style=" font-size:14pt;">为"""+str1+"""已知系统的"""+str2+"""归算坐标。</span></p></body></html>"""
- self.ui.printTableView.setHtml(str0)
-
- #----------------------------------------------------------
- # 计算结束自动跳转结果页面,并保留查询内容,以便输出
- widgets.stackedWidget.setCurrentWidget(widgets.new_page) # SET PAGE
- UIFunctions.resetStyle(self, btnName) # RESET ANOTHERS BUTTONS SELECTED
- btn.setStyleSheet(UIFunctions.selectMenu(btn.styleSheet())) # SELECT MENU
-
-
- # 点击事件
- # 在这里添加点击事件的方法
- # ///////////////////////////////////////////////////////////////
- def buttonClick(self):
- # GET BUTTON CLICKED
- btn = self.sender()
- btnName = btn.objectName()
-
- # 首页
- if btnName == "btn_home":
- widgets.stackedWidget.setCurrentWidget(widgets.home)
- UIFunctions.resetStyle(self, btnName)
- btn.setStyleSheet(UIFunctions.selectMenu(btn.styleSheet()))
-
- # 输入表格
- if btnName == "btn_widgets":
- widgets.stackedWidget.setCurrentWidget(widgets.widgets)
- UIFunctions.resetStyle(self, btnName)
- btn.setStyleSheet(UIFunctions.selectMenu(btn.styleSheet()))
-
- # 成果预览
- if btnName == "btn_new":
- widgets.stackedWidget.setCurrentWidget(widgets.new_page) # SET PAGE
- UIFunctions.resetStyle(self, btnName) # RESET ANOTHERS BUTTONS SELECTED
- btn.setStyleSheet(UIFunctions.selectMenu(btn.styleSheet())) # SELECT MENU
-
- # 数据一览
- if btnName == "btn_data":
- widgets.stackedWidget.setCurrentWidget(widgets.datainfo) # SET PAGE
- UIFunctions.resetStyle(self, btnName) # RESET ANOTHERS BUTTONS SELECTED
- btn.setStyleSheet(UIFunctions.selectMenu(btn.styleSheet())) # SELECT MENU
-
- # 皮肤切换
- if btnName == "btn_message":
- if self.useCustomTheme:
- themeFile = os.path.abspath(os.path.join(self.absPath, "themes/py_dracula_dark.qss"))
- UIFunctions.theme(self, themeFile, True)
- # SET HACKS
- AppFunctions.setThemeHack(self)
- self.useCustomTheme = False
- else:
- themeFile = os.path.abspath(os.path.join(self.absPath, "themes/py_dracula_light.qss"))
- UIFunctions.theme(self, themeFile, True)
- # SET HACKS
- AppFunctions.setThemeHack(self)
- self.useCustomTheme = True
- # 文件上传
- if btnName == "upload":
- global file_path
- # options = QFileDialog.Options()
- # 使用 QFileDialog 获取文件路径
- file_path, _ = QFileDialog.getOpenFileName(
- self,
- "选择文件",
- "",
- "表格文件 (*.xls *.xlsx)"
- )
- if file_path:
- # 处理选中的文件
- # print(file_path)
- UIFunctions.execute_script_based_on_selection(self, file_path)
-
- # messagebox.showinfo("提示",f"文件 '{file_name}' 跳转成功!")
- # 输出点击回馈
- print(f'Button "{btnName}" pressed!')
-
- # RESIZE EVENTS
- # ///////////////////////////////////////////////////////////////
- def resizeEvent(self, event):
- # Update Size Grips
- UIFunctions.resize_grips(self)
-
- # 鼠标点击事件
- # ///////////////////////////////////////////////////////////////
- def mousePressEvent(self, event):
- # SET DRAG POS WINDOW
- self.dragPos = event.globalPos()
-
- # 输出鼠标事件
- if event.buttons() == Qt.LeftButton:
- print('Mouse click: LEFT CLICK')
- if event.buttons() == Qt.RightButton:
- print('Mouse click: RIGHT CLICK')
-
-
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- app.setWindowIcon(QIcon("icon.ico"))
- window = MainWindow()
- # window.resize(1440, 960) # 高宽
- sys.exit(app.exec())
|