1. 程式人生 > 其它 >Qt Designer設計介面二,應用樹結構和MDI區域

Qt Designer設計介面二,應用樹結構和MDI區域

功能:

1.新增,刪除,修改分組、節點

2.按鈕來顯示/隱藏介面某部分割槽域

3.MDI區域顯示子視窗

效果圖:

程式碼:

import sys
from threading import Thread
from PySide2.QtCore import Qt
from PySide2.QtWidgets import (QApplication, QWidget, QTreeWidgetItem, QMdiSubWindow, QDialog)
from display import Ui_Form
from video import Ui_Dialog

class video_dialog(QDialog, QMdiSubWindow):
    
''' 功能:子視窗 ''' def __init__(self): super(video_dialog, self).__init__() self.video_dialog = Ui_Dialog() self.video_dialog.setupUi(self) self.video_dialog.video_lbl.setFixedWidth(220) self.video_dialog.video_lbl.setFixedHeight(220) self.video_dialog.video_lbl.setScaledContents(True)
class UI(QWidget): def __init__(self): super(UI, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) self.ui.display_btn.clicked.connect(self.display_area) self.ui.treeWidget.clicked.connect(self.on_tree_clicked) self.ui.add_btn.clicked.connect(self.addNode) self.ui.add_group_btn.clicked.connect(self.add_group) self.ui.del_btn.clicked.connect(self.delete_node) self.ui.tile_window_btn.clicked.connect(self.tile_window) self.ui.close_all_win_btn.clicked.connect(self.close_all_window) self.ui.treeWidget.expandAll()
# 字典用於記錄開啟視窗,某視窗存在時為啟用已存在視窗 self.subDict = {} def tile_window(self): self.ui.mdiArea.tileSubWindows() def close_all_window(self): self.subDict = {} self.ui.mdiArea.closeAllSubWindows() def display_area(self): ''' 功能:通過按鈕顯示/隱藏某區域 :return: ''' if self.ui.display_btn.text() == '<<': self.ui.groupBox.setHidden(True) self.ui.display_btn.setText('>>') else: self.ui.groupBox.setHidden(False) self.ui.display_btn.setText('<<') def on_tree_clicked(self, index): ''' 功能:單擊顯示子視窗 :param index: :return: ''' item = self.ui.treeWidget.currentItem() if item.parent() == None: return win_title = item.text(0) if win_title in self.subDict.keys(): try: self.subDict[win_title].setFocus() return except: pass self.video_ui = video_dialog() self.ui.mdiArea.addSubWindow(self.video_ui) self.video_ui.setWindowTitle(win_title) self.video_ui.show() self.subDict[win_title] = self.video_ui th = Thread(target = self.display) th.start() def display(self): item = self.ui.treeWidget.currentItem() self.video_ui.video_dialog.video_lbl.setText(item.text(0)) def add_group(self): root = QTreeWidgetItem(self.ui.treeWidget) root.setText(0, '新分組') root.setFlags(root.flags() | Qt.ItemIsEditable) self.ui.treeWidget.expandAll() def delete_node(self): ''' 功能:單擊選中項後刪除分組或節點 :return: ''' item = self.ui.treeWidget.currentItem() parent = item.parent() if parent != None: parent.removeChild(item) win_title = item.text(0) if win_title in self.subDict.keys(): try: self.subDict[win_title].setFocus() self.ui.mdiArea.closeActiveSubWindow() except: pass del self.subDict[win_title] else: # 獲取當前根節點的子節點數量 count = item.childCount() if count != 0: for i in range(0, count): win_title = item.child(i).text(0) if win_title in self.subDict.keys(): try: self.subDict[win_title].setFocus() self.ui.mdiArea.closeActiveSubWindow() except: pass del self.subDict[win_title] root_index = self.ui.treeWidget.indexOfTopLevelItem(item) self.ui.treeWidget.takeTopLevelItem(root_index) def addNode(self): ''' 功能:新建節點 :return: ''' item = self.ui.treeWidget.currentItem() ip = self.ui.ip_lineEdit.text().strip() if len(ip) == 0: return try: if item.parent() == None: node = QTreeWidgetItem(item) node.setText(0, ip) else: node = QTreeWidgetItem(item.parent()) node.setText(0, ip) except: pass self.ui.treeWidget.expandAll() if __name__ == '__main__': app = QApplication([]) server = UI() server.show() sys.exit(app.exec_())