forked from pn2q95w37/XL
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.2 KiB
87 lines
3.2 KiB
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtGui import QCursor
|
|
from PyQt5.QtWidgets import QListWidget, QListView, QAbstractItemView, QAction, QMenu
|
|
|
|
from config import items
|
|
|
|
|
|
class MyListWidget(QListWidget):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent=parent)
|
|
self.mainwindow = parent
|
|
self.setDragEnabled(True)
|
|
# 选中不显示虚线
|
|
# self.setEditTriggers(QAbstractItemView.NoEditTriggers)
|
|
self.setFocusPolicy(Qt.NoFocus)
|
|
|
|
|
|
class UsedListWidget(MyListWidget):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent=parent)
|
|
self.setAcceptDrops(True) # 激活组件的拖拽事件
|
|
self.setFlow(QListView.TopToBottom) # 设置列表方向(表示数据项从上至下排列)
|
|
self.setDefaultDropAction(Qt.MoveAction) # 设置拖放为移动而不是复制一个
|
|
self.setDragDropMode(QAbstractItemView.InternalMove) # 设置拖放模式, 内部拖放
|
|
self.itemClicked.connect(self.show_attr)
|
|
self.setMinimumWidth(200)
|
|
|
|
self.move_item = None
|
|
|
|
def contextMenuEvent(self, e):
|
|
# 右键菜单事件
|
|
item = self.itemAt(self.mapFromGlobal(QCursor.pos()))
|
|
if not item: return # 判断是否是空白区域
|
|
menu = QMenu()
|
|
delete_action = QAction('删除', self)
|
|
delete_action.triggered.connect(lambda: self.delete_item(item)) # 传递额外值
|
|
menu.addAction(delete_action)
|
|
menu.exec(QCursor.pos())
|
|
|
|
def delete_item(self, item):
|
|
# 删除操作
|
|
self.takeItem(self.row(item))
|
|
self.mainwindow.update_image() # 更新frame
|
|
self.mainwindow.dock_attr.close()
|
|
|
|
def dropEvent(self, event):
|
|
super().dropEvent(event)
|
|
self.mainwindow.update_image()
|
|
|
|
def show_attr(self):
|
|
item = self.itemAt(self.mapFromGlobal(QCursor.pos()))
|
|
if not item: return
|
|
param = item.get_params() # 获取当前item的属性
|
|
if type(item) in items:
|
|
index = items.index(type(item)) # 获取item对应的table索引
|
|
self.mainwindow.stackedWidget.setCurrentIndex(index)
|
|
self.mainwindow.stackedWidget.currentWidget().update_params(param) # 更新对应的table
|
|
self.mainwindow.dock_attr.show()
|
|
|
|
|
|
class FuncListWidget(MyListWidget):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent=parent)
|
|
self.setFixedHeight(64)
|
|
self.setFlow(QListView.LeftToRight) # 设置列表方向
|
|
self.setViewMode(QListView.IconMode) # 设置列表模式
|
|
# self.setViewMode(QListView.ViewMode)
|
|
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # 关掉滑动条
|
|
self.setAcceptDrops(False)
|
|
for itemType in items:
|
|
self.addItem(itemType())
|
|
self.itemClicked.connect(self.add_used_function)
|
|
|
|
def add_used_function(self):
|
|
func_item = self.currentItem()
|
|
if type(func_item) in items:
|
|
use_item = type(func_item)()
|
|
self.mainwindow.useListWidget.addItem(use_item)
|
|
self.mainwindow.update_image()
|
|
|
|
def enterEvent(self, event):
|
|
self.setCursor(Qt.PointingHandCursor)
|
|
|
|
def leaveEvent(self, event):
|
|
self.setCursor(Qt.ArrowCursor)
|
|
self.setCurrentRow(-1) # 取消选中状态
|