|
@@ -45,24 +45,52 @@ def ensure_subwin_in_midarea(mdiArea:QMdiArea, win:QWidget, pos:QPoint):
|
|
|
else:
|
|
else:
|
|
|
y = mdiArea.height() - win.height()
|
|
y = mdiArea.height() - win.height()
|
|
|
return QPoint(x, y)
|
|
return QPoint(x, y)
|
|
|
|
|
+
|
|
|
|
|
+# 动态窗口,初始化时会添加动作到 菜单栏 - window 中
|
|
|
|
|
+class MdiSubWindow(QMainWindow):
|
|
|
|
|
+ def __init__(self, mainWindow):
|
|
|
|
|
+ super().__init__(mainWindow)
|
|
|
|
|
+ self.mainWindow = mainWindow
|
|
|
|
|
+ self.regist_action(mainWindow)
|
|
|
|
|
+ # 修改窗口标题时同步修改menu-Action信息
|
|
|
|
|
+ self.windowTitleChanged.connect(lambda: self.menuWindow_action.setText(self.windowTitle()))
|
|
|
|
|
+
|
|
|
|
|
+ def closeEvent(self, event: QCloseEvent):
|
|
|
|
|
+ self.mainWindow.menuWindow.removeAction(self.menuWindow_action)
|
|
|
|
|
+ return super().closeEvent(event)
|
|
|
|
|
+
|
|
|
|
|
+ def regist_action(self, mainWindow):
|
|
|
|
|
+ action = QAction(mainWindow)
|
|
|
|
|
+ action.setText(self.windowTitle())
|
|
|
|
|
+ mainWindow.menuWindow.insertAction(mainWindow.action_win_separator,action)
|
|
|
|
|
+ action.setActionGroup(mainWindow.action_win_group)
|
|
|
|
|
+ action.setCheckable(True)
|
|
|
|
|
+ action.setChecked(True)
|
|
|
|
|
+ action.triggered.connect(self.active_win)
|
|
|
|
|
+ self.menuWindow_action = action
|
|
|
|
|
|
|
|
|
|
+ def active_win(self):
|
|
|
|
|
+ self.hide()
|
|
|
|
|
+ self.show()
|
|
|
|
|
+
|
|
|
|
|
|
|
|
-class FormWindow(Ui_Form, QMainWindow):
|
|
|
|
|
- def __init__(self, mdiArea:QMdiArea, instan:GuiType._GuiWinForm, pos:QPoint=None) -> None:
|
|
|
|
|
- super().__init__(mdiArea)
|
|
|
|
|
|
|
+class FormWindow(Ui_Form, MdiSubWindow):
|
|
|
|
|
+ def __init__(self, mainWindow, instan:GuiType._GuiWinForm, pos:QPoint=None) -> None:
|
|
|
|
|
+ super().__init__(mainWindow)
|
|
|
self.setupUi(self)
|
|
self.setupUi(self)
|
|
|
|
|
+ mdiArea:QMdiArea = mainWindow.mdiArea
|
|
|
self.instan = instan
|
|
self.instan = instan
|
|
|
self.setWindowTitle(instan.Title)
|
|
self.setWindowTitle(instan.Title)
|
|
|
self.tableView.setModel(FormWindow.get_form_model(self.instan.Form))
|
|
self.tableView.setModel(FormWindow.get_form_model(self.instan.Form))
|
|
|
- mdisubwin = mdiArea.addSubWindow(self)
|
|
|
|
|
- mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
|
|
|
|
|
|
|
|
|
|
|
|
+ self.mdisubwin:QMdiSubWindow = mainWindow.mdiArea.addSubWindow(self)
|
|
|
|
|
+ self.mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
|
|
|
# mdisubwin.move(mdiArea.x()+(mdiArea.width()-self.width())/2 + self.width()*0.8,mdiArea.y()+(mdiArea.height()-self.height())/2)
|
|
# mdisubwin.move(mdiArea.x()+(mdiArea.width()-self.width())/2 + self.width()*0.8,mdiArea.y()+(mdiArea.height()-self.height())/2)
|
|
|
- mdisubwin.show()
|
|
|
|
|
|
|
+ self.mdisubwin.show()
|
|
|
# 必须要show之后才能 ensure_subwin_in_midarea,因为没有显示时Form窗口大小是不正确的
|
|
# 必须要show之后才能 ensure_subwin_in_midarea,因为没有显示时Form窗口大小是不正确的
|
|
|
# 移动到鼠标 pos 位置
|
|
# 移动到鼠标 pos 位置
|
|
|
if pos:
|
|
if pos:
|
|
|
- mdisubwin.move(ensure_subwin_in_midarea(mdiArea, self, pos))
|
|
|
|
|
|
|
+ self.mdisubwin.move(ensure_subwin_in_midarea(mdiArea, self, pos))
|
|
|
self.reportButton.clicked.connect(lambda: print(self.geometry()))
|
|
self.reportButton.clicked.connect(lambda: print(self.geometry()))
|
|
|
|
|
|
|
|
def get_form_model(form:GuiType._GuiForm):
|
|
def get_form_model(form:GuiType._GuiForm):
|
|
@@ -117,7 +145,6 @@ class MultiFormWin(FormWindow):
|
|
|
|
|
|
|
|
self.verticalLayout.insertLayout(0,self.horizontalLayout_2)
|
|
self.verticalLayout.insertLayout(0,self.horizontalLayout_2)
|
|
|
mdiArea.addSubWindow(self)
|
|
mdiArea.addSubWindow(self)
|
|
|
- # mdiArea.currentSubWindow
|
|
|
|
|
self.show()
|
|
self.show()
|
|
|
|
|
|
|
|
|
|
|
|
@@ -126,19 +153,19 @@ class TreeWidgetItem(QTreeWidgetItem):
|
|
|
super().__init__(parent)
|
|
super().__init__(parent)
|
|
|
self.tree_row = tree_row
|
|
self.tree_row = tree_row
|
|
|
|
|
|
|
|
-class LineEditWin(Ui_LineEdit, QMainWindow):
|
|
|
|
|
- def __init__(self, mdiArea:QMdiArea, instance:GuiType._GuiWinLinedText) -> None:
|
|
|
|
|
- super().__init__()
|
|
|
|
|
|
|
+class LineEditWin(Ui_LineEdit, MdiSubWindow):
|
|
|
|
|
+ def __init__(self, mainWindow, instance:GuiType._GuiWinLinedText) -> None:
|
|
|
|
|
+ super().__init__(mainWindow)
|
|
|
self.setupUi(self)
|
|
self.setupUi(self)
|
|
|
self.setWindowTitle(instance.Title)
|
|
self.setWindowTitle(instance.Title)
|
|
|
-
|
|
|
|
|
self.textBrowser.textChanged.connect(self.__line_widget_line_count_changed)
|
|
self.textBrowser.textChanged.connect(self.__line_widget_line_count_changed)
|
|
|
self.lineWidget = LineNumberWidget(self.textBrowser)
|
|
self.lineWidget = LineNumberWidget(self.textBrowser)
|
|
|
self.horizontalLayout.insertWidget(0,self.lineWidget)
|
|
self.horizontalLayout.insertWidget(0,self.lineWidget)
|
|
|
self.instance = instance
|
|
self.instance = instance
|
|
|
self.set_text(instance)
|
|
self.set_text(instance)
|
|
|
|
|
|
|
|
- self.mdisubwin = mdiArea.addSubWindow(self)
|
|
|
|
|
|
|
+ mdiArea:QMdiArea = mainWindow.mdiArea
|
|
|
|
|
+ self.mdisubwin:QMdiSubWindow = mdiArea.addSubWindow(self)
|
|
|
self.mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
|
|
self.mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
|
|
|
self.mdisubwin.resize(self.width(), mdiArea.height())
|
|
self.mdisubwin.resize(self.width(), mdiArea.height())
|
|
|
self.mdisubwin.show()
|
|
self.mdisubwin.show()
|
|
@@ -173,18 +200,11 @@ class LineEditWin(Ui_LineEdit, QMainWindow):
|
|
|
self.lineWidget.changeLineCount(n)
|
|
self.lineWidget.changeLineCount(n)
|
|
|
|
|
|
|
|
|
|
|
|
|
-class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
|
|
|
|
+class SideBarWin(Ui_SideBar, MdiSubWindow):
|
|
|
def __init__(self, ui, instance:GuiType._GuiSideBar) -> None:
|
|
def __init__(self, ui, instance:GuiType._GuiSideBar) -> None:
|
|
|
- super().__init__()
|
|
|
|
|
|
|
+ super().__init__(ui)
|
|
|
self.setupUi(self)
|
|
self.setupUi(self)
|
|
|
self.ui = ui
|
|
self.ui = ui
|
|
|
- mdiArea:QMdiArea = ui.mdiArea
|
|
|
|
|
- self.mdiArea = 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.instance = instance
|
|
|
self.init_win_data(instance)
|
|
self.init_win_data(instance)
|
|
|
self.form_multi_instan = None
|
|
self.form_multi_instan = None
|
|
@@ -194,6 +214,14 @@ class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
self.treeWidget.customContextMenuRequested.connect(self.right_click_menu)
|
|
self.treeWidget.customContextMenuRequested.connect(self.right_click_menu)
|
|
|
self.sheets.activated.connect(self.activate_table_sheet)
|
|
self.sheets.activated.connect(self.activate_table_sheet)
|
|
|
self.tableView.customContextMenuRequested.connect(self.right_click_menu)
|
|
self.tableView.customContextMenuRequested.connect(self.right_click_menu)
|
|
|
|
|
+
|
|
|
|
|
+ mdiArea:QMdiArea = ui.mdiArea
|
|
|
|
|
+ self.mdiArea:QMdiArea = mdiArea
|
|
|
|
|
+ self.mdisubwin:QMdiSubWindow = mdiArea.addSubWindow(self)
|
|
|
|
|
+ self.mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
|
|
|
|
|
+ # self.mdisubwin 是用于管理子窗口的,在子窗口中,是由 mdiArea 来管理显示/隐藏、大小、关闭等
|
|
|
|
|
+ self.mdisubwin.resize(self.width(), mdiArea.height())
|
|
|
|
|
+ self.mdisubwin.show()
|
|
|
|
|
|
|
|
def right_click_menu(self, pos):
|
|
def right_click_menu(self, pos):
|
|
|
sender = self.sender()
|
|
sender = self.sender()
|
|
@@ -212,7 +240,11 @@ class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
def add_crossprobe_win(self, sender):
|
|
def add_crossprobe_win(self, sender):
|
|
|
tree_names, formname, formrow = self.get_win_argument(sender)
|
|
tree_names, formname, formrow = self.get_win_argument(sender)
|
|
|
line_text = self.instance.CrossProbe(tree_names, formname, formrow)
|
|
line_text = self.instance.CrossProbe(tree_names, formname, formrow)
|
|
|
- self.lineEdit_win = LineEditWin(self.ui.mdiArea, line_text)
|
|
|
|
|
|
|
+ property_win:QMdiSubWindow = get_sub_win(self.mdiArea, LineEditWin, line_text.Title)
|
|
|
|
|
+ # 窗口已经存在
|
|
|
|
|
+ if property_win:
|
|
|
|
|
+ property_win.close()
|
|
|
|
|
+ self.lineEdit_win = LineEditWin(self.ui, line_text)
|
|
|
|
|
|
|
|
def add_properties_win(self, sender:QWidget):
|
|
def add_properties_win(self, sender:QWidget):
|
|
|
tree_names, formname, formrow = self.get_win_argument(sender)
|
|
tree_names, formname, formrow = self.get_win_argument(sender)
|
|
@@ -223,7 +255,7 @@ class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
property_win.close()
|
|
property_win.close()
|
|
|
mouse_pos = QCursor().pos()
|
|
mouse_pos = QCursor().pos()
|
|
|
pos = self.mdiArea.mapFromGlobal(mouse_pos)
|
|
pos = self.mdiArea.mapFromGlobal(mouse_pos)
|
|
|
- form_window = FormWindow(self.mdiArea, win_form_instan, pos)
|
|
|
|
|
|
|
+ form_window = FormWindow(self.ui, win_form_instan, pos)
|
|
|
|
|
|
|
|
def get_win_argument(self, sender):
|
|
def get_win_argument(self, sender):
|
|
|
item = self.treeWidget.currentItem()
|
|
item = self.treeWidget.currentItem()
|
|
@@ -250,7 +282,6 @@ class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
self.instance = instance
|
|
self.instance = instance
|
|
|
self.setWindowTitle(self.instance.Title)
|
|
self.setWindowTitle(self.instance.Title)
|
|
|
self.set_tree(self.instance.Tree)
|
|
self.set_tree(self.instance.Tree)
|
|
|
- self.mdisubwin.update()
|
|
|
|
|
|
|
|
|
|
# 添加一行树节点,该节点包含 n 列数据
|
|
# 添加一行树节点,该节点包含 n 列数据
|
|
|
def add_tree_row(self, parent, tree_row:GuiType._GuiTreeRow):
|
|
def add_tree_row(self, parent, tree_row:GuiType._GuiTreeRow):
|
|
@@ -317,13 +348,6 @@ class SideBarWin(Ui_SideBar, QMainWindow):
|
|
|
# 根节点
|
|
# 根节点
|
|
|
self.set_tree_row(self.treeWidget, tree_row)
|
|
self.set_tree_row(self.treeWidget, tree_row)
|
|
|
|
|
|
|
|
- # def get_form_model(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)
|
|
|
|
|
- # return model
|
|
|
|
|
|
|
|
|
|
def set_form_multi(self, multi_form:GuiType._GuiFormMulti):
|
|
def set_form_multi(self, multi_form:GuiType._GuiFormMulti):
|
|
|
self.sheets.clear()
|
|
self.sheets.clear()
|
|
@@ -345,10 +369,7 @@ class SubWindows(QObject):
|
|
|
|
|
|
|
|
def add_win_form_multi(self, instance:GuiType._GuiWinFormMulti):
|
|
def add_win_form_multi(self, instance:GuiType._GuiWinFormMulti):
|
|
|
form_multi_win = MultiFormWin(self.ui.mdiArea)
|
|
form_multi_win = MultiFormWin(self.ui.mdiArea)
|
|
|
- # form_multi_win:Ui_form_multi
|
|
|
|
|
- # self.ui.mdiArea.addSubWindow(form_multi_win)
|
|
|
|
|
form_multi_win.setWindowTitle(instance.Title)
|
|
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))
|
|
form_multi_win.sheets.currentIndexChanged.connect(lambda:self.change_table_sheet(form_multi_win))
|
|
|
self.set_form_multi_table(form_multi_win,instance.Forms)
|
|
self.set_form_multi_table(form_multi_win,instance.Forms)
|
|
|
self.ui.mdiArea.activeSubWindow().resize(self.ui.mdiArea.width()/2,self.ui.mdiArea.height())
|
|
self.ui.mdiArea.activeSubWindow().resize(self.ui.mdiArea.width()/2,self.ui.mdiArea.height())
|