|
|
@@ -5,34 +5,175 @@ from PySide2.QtGui import *
|
|
|
from PySide2.QtUiTools import QUiLoader
|
|
|
# from main_windows import MainWindow
|
|
|
from ui.ui_TimingAnalyze import Ui_TimingWindow
|
|
|
-from ui.ui_form_multi import Ui_form_multi
|
|
|
-from ui.ui_Hier_1 import Ui_Hier_1
|
|
|
+from ui.ui_Form import Ui_Form
|
|
|
+from ui.ui_SideBar import Ui_SideBar
|
|
|
import GuiType
|
|
|
|
|
|
-class MultiFormWin(Ui_form_multi,QMainWindow):
|
|
|
- def __init__(self, parent) -> None:
|
|
|
+class MultiFormWin(Ui_Form,QMainWindow):
|
|
|
+ def __init__(self, mdiArea) -> None:
|
|
|
super().__init__()
|
|
|
self.setupUi(self)
|
|
|
- self.setParent(parent)
|
|
|
+ self.setParent(mdiArea)
|
|
|
+ self.init_multi_form_ui(mdiArea)
|
|
|
self.models = []
|
|
|
+ self.reportButton.clicked.connect(self.report_table)
|
|
|
+
|
|
|
+ def report_table(self):
|
|
|
+ print("report test")
|
|
|
+
|
|
|
+ def init_multi_form_ui(self,mdiArea:QMdiArea):
|
|
|
+ self.horizontalLayout_2 = QHBoxLayout()
|
|
|
+ self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
|
|
|
+ self.sheets = QComboBox(self.centralwidget)
|
|
|
+ self.sheets.setObjectName(u"sheets")
|
|
|
+ sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
|
|
|
+ sizePolicy.setHorizontalStretch(0)
|
|
|
+ sizePolicy.setVerticalStretch(0)
|
|
|
+ sizePolicy.setHeightForWidth(self.sheets.sizePolicy().hasHeightForWidth())
|
|
|
+ self.sheets.setSizePolicy(sizePolicy)
|
|
|
+
|
|
|
+ self.horizontalLayout_2.addWidget(self.sheets)
|
|
|
+
|
|
|
+ self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
|
|
+
|
|
|
+ self.horizontalLayout_2.addItem(self.horizontalSpacer_3)
|
|
|
+
|
|
|
+ self.horizontalLayout_2.setStretch(0, 3)
|
|
|
+ self.horizontalLayout_2.setStretch(1, 6)
|
|
|
+
|
|
|
+ self.verticalLayout.insertLayout(0,self.horizontalLayout_2)
|
|
|
+ mdiArea.addSubWindow(self)
|
|
|
+ # mdiArea.currentSubWindow
|
|
|
+ self.show()
|
|
|
+
|
|
|
+class TreeWidgetItem(QTreeWidgetItem):
|
|
|
+ def __init__(self, parent: int, tree_row:GuiType._GuiTreeRow):
|
|
|
+ super().__init__(parent)
|
|
|
+ self.tree_row = tree_row
|
|
|
+
|
|
|
+class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
+ def __init__(self, ui, instance:GuiType._GuiSideBar) -> None:
|
|
|
+ super().__init__()
|
|
|
+ self.setupUi(self)
|
|
|
+ self.ui = ui
|
|
|
+ mdiArea:QMdiArea = ui.mdiArea
|
|
|
+ # self.mdisubwin 是用于管理子窗口的,在子窗口中,是由 mdiArea 来管理显示/隐藏、大小、关闭等
|
|
|
+ self.mdisubwin = mdiArea.addSubWindow(self)
|
|
|
+ self.mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
|
|
|
+ self.mdisubwin.resize(self.width(), mdiArea.height())
|
|
|
+ self.mdisubwin.show()
|
|
|
+ self.instance = instance
|
|
|
+ self.init_win_data(instance)
|
|
|
+ self.form_multi_temp = None
|
|
|
+ self.treeWidget.itemExpanded.connect(self.expand_tree)
|
|
|
+ self.treeWidget.itemCollapsed.connect(self.collapse_tree)
|
|
|
+ self.treeWidget.itemActivated.connect(self.activated_tree_node)
|
|
|
+ self.sheets.activated.connect(self.activate_table_sheet)
|
|
|
+
|
|
|
+ # 侧边栏只有一个,只需要 update 即可
|
|
|
+ def init_win_data(self, instance:GuiType._GuiSideBar):
|
|
|
+ if self.treeWidget.topLevelItemCount():
|
|
|
+ for i in range(self.treeWidget.topLevelItemCount()):
|
|
|
+ # 获取这个 item 并删除
|
|
|
+ self.treeWidget.takeTopLevelItem(i)
|
|
|
+
|
|
|
+ self.ui.setWindowTitle(self.ui.GUI.Title)
|
|
|
+ self.instance = instance
|
|
|
+ self.setWindowTitle(self.instance.Title)
|
|
|
+ self.set_tree(self.instance.Tree)
|
|
|
+ self.mdisubwin.update()
|
|
|
+
|
|
|
+ # 添加一行树节点,改节点包含 n 列数据
|
|
|
+ def add_tree_row(self, parent, tree_row:GuiType._GuiTreeRow):
|
|
|
+ item = TreeWidgetItem(parent, tree_row)
|
|
|
+ item.setText(0,tree_row.Name)
|
|
|
+ for i in range(0, len(tree_row.Row)):
|
|
|
+ item.setText(i+1,tree_row.Row[i])
|
|
|
+ return item
|
|
|
+
|
|
|
+ def activated_tree_node(self, item:TreeWidgetItem, column):
|
|
|
+ # 如果含有子节点,由展开信号来处理
|
|
|
+ if item.tree_row.HasSubTreeRows:
|
|
|
+ return
|
|
|
+ self.form_multi_temp = self.instance.GetForms(list(item.text(0)))
|
|
|
+ self.set_form_multi(self.form_multi_temp)
|
|
|
+
|
|
|
+ def collapse_tree(self, item:TreeWidgetItem):
|
|
|
+ # 取出并删除所有子节点
|
|
|
+ childrens = item.takeChildren()
|
|
|
+ if not childrens:
|
|
|
+ return
|
|
|
+
|
|
|
+ if item.tree_row.HasSubTreeRows:
|
|
|
+ # 只添加一个子节点,让父节点变成可展开形式
|
|
|
+ sub_tree_row:GuiType._GuiTreeRow = item.tree_row.GetSubTreeRows()[0]
|
|
|
+ self.add_tree_row(item, sub_tree_row)
|
|
|
+ # if item.tree_row.HasSubTreeRows:
|
|
|
+ # sub_tree_rows = item.tree_row.GetSubTreeRows()[1:]
|
|
|
+ # for row in sub_tree_rows:
|
|
|
+ # self.set_tree_row(item, row)
|
|
|
+
|
|
|
+ def expand_tree(self, item:TreeWidgetItem):
|
|
|
+ if item.tree_row.HasSubTreeRows:
|
|
|
+ sub_tree_rows = item.tree_row.GetSubTreeRows()[1:]
|
|
|
+ for row in sub_tree_rows:
|
|
|
+ self.set_tree_row(item, row)
|
|
|
+
|
|
|
+ def activate_table_sheet(self, index):
|
|
|
+ self.set_form(self.form_multi_temp.GetForm(index))
|
|
|
+
|
|
|
+ def set_tree_row(self, parent:TreeWidgetItem, tree_row:GuiType._GuiTreeRow):
|
|
|
+ tree_widget_item = self.add_tree_row(parent, tree_row)
|
|
|
+ if tree_row.HasSubTreeRows:
|
|
|
+ # 只添加一个子节点,让父节点变成可展开形式
|
|
|
+ sub_tree_row:GuiType._GuiTreeRow = tree_row.GetSubTreeRows()[0]
|
|
|
+ self.add_tree_row(tree_widget_item, sub_tree_row)
|
|
|
+
|
|
|
+ def set_tree(self, tree:GuiType._GuiTree):
|
|
|
+ # 树
|
|
|
+ header_item = self.treeWidget.headerItem()
|
|
|
+ for i in range(len(tree.FixedRow)):
|
|
|
+ header_item.setText(i, tree.FixedRow[i])
|
|
|
+ for tree_row in tree.TreeRows:
|
|
|
+ # 根节点
|
|
|
+ self.set_tree_row(self.treeWidget, tree_row)
|
|
|
+
|
|
|
+ def set_form(self, form:GuiType._GuiForm):
|
|
|
+ model = QStandardItemModel(0, len(form.FixedRow))
|
|
|
+ model.setHorizontalHeaderLabels(form.FixedRow)
|
|
|
+ for row in form.Rows:
|
|
|
+ row_items=[QStandardItem(text) for text in row]
|
|
|
+ model.appendRow(row_items)
|
|
|
+ self.tableView.setModel(model)
|
|
|
+ return model
|
|
|
+
|
|
|
+ def set_form_multi(self, multi_form:GuiType._GuiFormMulti):
|
|
|
+ self.sheets.clear()
|
|
|
+ for sheet_name in multi_form.Names:
|
|
|
+ self.sheets.addItem(sheet_name)
|
|
|
+ if self.sheets.count() > 0:
|
|
|
+ form = multi_form.GetForm(self.sheets.currentIndex())
|
|
|
+ self.set_form(form)
|
|
|
+
|
|
|
|
|
|
class SubWindows(QObject):
|
|
|
sig = Signal(object)
|
|
|
def __init__(self, parent):
|
|
|
super().__init__(parent)
|
|
|
self.ui = parent
|
|
|
+ self.side_bar = SideBarWin(self.ui, self.ui.GUI.SideBar)
|
|
|
self.info = {}
|
|
|
|
|
|
def add_win_form_multi(self, instance:GuiType._GuiWinFormMulti):
|
|
|
form_multi_win = MultiFormWin(self.ui.mdiArea)
|
|
|
# form_multi_win:Ui_form_multi
|
|
|
- self.ui.mdiArea.addSubWindow(form_multi_win)
|
|
|
+ # self.ui.mdiArea.addSubWindow(form_multi_win)
|
|
|
form_multi_win.setWindowTitle(instance.Title)
|
|
|
# form_multi_win.sheets.currentIndexChanged.connect(lambda:self.change_table_sheet(form_multi_win))
|
|
|
form_multi_win.sheets.currentIndexChanged.connect(lambda:self.change_table_sheet(form_multi_win))
|
|
|
self.set_form_multi_table(form_multi_win,instance.Forms)
|
|
|
- form_multi_win.show()
|
|
|
-
|
|
|
+ self.ui.mdiArea.activeSubWindow().resize(self.ui.mdiArea.width()/2,self.ui.mdiArea.height())
|
|
|
+ self.ui.mdiArea.activeSubWindow().move(form_multi_win.width(),0)
|
|
|
|
|
|
def set_form_multi_table(self, win:MultiFormWin, multi_form:GuiType._GuiFormMulti):
|
|
|
multi_form:GuiType._GuiFormMulti
|
|
|
@@ -50,7 +191,6 @@ class SubWindows(QObject):
|
|
|
win.models.append(model)
|
|
|
if win.sheets.count() > 0:
|
|
|
win.sheets.setCurrentIndex(0)
|
|
|
- # win.tableView.setCurrentIndex()(models.keys()[0])
|
|
|
win.tableView.setModel(win.models[0])
|
|
|
|
|
|
def change_table_sheet(self, win:MultiFormWin):
|
|
|
@@ -61,15 +201,9 @@ class SubWindows(QObject):
|
|
|
def add_windows(self, instance):
|
|
|
if isinstance(instance, GuiType._GuiWinFormMulti):
|
|
|
self.add_win_form_multi(instance)
|
|
|
+ elif isinstance(instance, GuiType._GuiSideBar):
|
|
|
+
|
|
|
+ self.side_bar.init_win_data(instance)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
- m = GuiType._GuiWinFormMulti('multi', 1)
|
|
|
- # print(dir(GuiType))
|
|
|
- # Gui_class = [e for e in dir(GuiType) if not e.startswith('__')]
|
|
|
- # print(type(Gui_class[0]))
|
|
|
- # print(GuiType.__builtins__)
|
|
|
- # print(isclass(GuiType._GuiWinFormMulti))
|
|
|
- # print(m.__dict__)
|
|
|
- print(dir(m))
|
|
|
- print(m.__str__())
|
|
|
- print(m.__class__)
|
|
|
+ m = GuiType._GuiWinFormMulti('multi', 1)
|