개정판 18a0281b
ImageViewer에서 svg 클릭 시 TreeWidget에서 검색하는 기능 구현 중
DTI_PID/DTI_PID/App.py | ||
---|---|---|
143 | 143 |
self.graphicsView.scene.clear() |
144 | 144 |
self.path = self.graphicsView.loadImageFromFile() |
145 | 145 |
baseName = os.path.basename(self.path) |
146 |
root = QTreeWidgetItem(self.resultTreeWidget, [os.path.splitext(baseName)[0]])
|
|
146 |
self.resultTreeWidget.setCurrentPID(baseName)
|
|
147 | 147 |
|
148 | 148 |
# DEBUG |
149 | 149 |
''' |
... | ... | |
217 | 217 |
|
218 | 218 |
try: |
219 | 219 |
self.dlg = QRecognitionDialog(self) |
220 |
self.startThread() |
|
220 |
#self.startThread()
|
|
221 | 221 |
self.dlg.show() |
222 | 222 |
self.dlg.exec_() |
223 |
|
|
223 |
self.dlg.ui.buttonBox.setEnabled(True) |
|
224 |
self.xmlPath = ["D:/Visual Studio Project/DTIPID/DTIPID/DTI_PID/DTI_PID/res/Result/SG_TEST/output/UY1-K-2000_P1_300dpi.xml"] |
|
225 |
self.dlg.isAccepted = True |
|
224 | 226 |
if self.dlg.isAccepted == True: |
225 | 227 |
self.loadRecognitionResult(self.xmlPath[0]) |
226 | 228 |
|
... | ... | |
267 | 269 |
if os.path.isfile(svgFilePath): |
268 | 270 |
svg = SymbolSvgItem(svgFilePath) |
269 | 271 |
svg.name = name |
272 |
svg.type = type |
|
270 | 273 |
svg.angle = angle |
271 | 274 |
svg.loc = pt |
272 | 275 |
svg.size = size |
273 | 276 |
|
277 |
#### |
|
278 |
svg.clicked.connect(lambda svg=svg: self.resultTreeWidget.findItem(svg)) |
|
279 |
|
|
274 | 280 |
transform = QTransform() |
275 | 281 |
if (1.57 == angle) or (4.71 == angle): |
276 | 282 |
transform.translate(pt[0] + size[0]*0.5,pt[1] + size[1]*0.5) |
DTI_PID/DTI_PID/QDirTreeWidget.py | ||
---|---|---|
27 | 27 |
self.itemClicked.connect(self.itemClickEvent) |
28 | 28 |
self.setContextMenuPolicy(Qt.CustomContextMenu) |
29 | 29 |
self.customContextMenuRequested.connect(self.openContextMenu) |
30 |
|
|
30 |
|
|
31 | 31 |
def openContextMenu(self, position): |
32 | 32 |
indexes = self.selectedIndexes() |
33 | 33 |
itemPosition = self.mapTo(self, position) |
DTI_PID/DTI_PID/QResultTreeWidget.py | ||
---|---|---|
9 | 9 |
except ImportError: |
10 | 10 |
raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.") |
11 | 11 |
from SymbolSvgItem import SymbolSvgItem |
12 |
from AppDocData import AppDocData |
|
13 |
import os |
|
12 | 14 |
|
13 | 15 |
class QResultTreeWidget(QTreeWidget): |
16 |
TREE_DATA_ROLE = Qt.ToolTipRole |
|
14 | 17 |
|
15 | 18 |
def __init__(self, imageViewer): |
16 | 19 |
QTreeWidget.__init__(self) |
17 | 20 |
self.itemClicked.connect(self.itemClickEvent) |
18 | 21 |
self.imageViewer = imageViewer |
19 | 22 |
self.scene = imageViewer.scene |
23 |
self.root = None |
|
24 |
|
|
25 |
''' |
|
26 |
@brief Clear TreeWidget and Set Current PID |
|
27 |
@author Jeongwoo |
|
28 |
@date 18.04.11 |
|
29 |
@history . |
|
30 |
''' |
|
31 |
def setCurrentPID(self, baseName): |
|
32 |
self.clear() |
|
33 |
self.root = QTreeWidgetItem(self, [os.path.splitext(baseName)[0]]) |
|
20 | 34 |
|
21 | 35 |
''' |
22 | 36 |
@brief Scene Changed Listener |
... | ... | |
40 | 54 |
''' |
41 | 55 |
def initResultTreeWidget(self, sceneItems): |
42 | 56 |
print("initResultTree") |
43 |
self.clear() |
|
57 |
if self.root is not None: |
|
58 |
self.root.takeChildren() |
|
44 | 59 |
symbolSvgItemList = [] |
45 | 60 |
for item in sceneItems: |
46 | 61 |
if (type(item) is SymbolSvgItem): |
47 | 62 |
newItem = QTreeWidgetItem([item.name]) |
48 |
newItem.setData(0, Qt.ToolTipRole, item) |
|
49 |
self.invisibleRootItem().addChild(newItem) |
|
63 |
iconPath = AppDocData.instance().getCurrentProject().getSvgFilePath() + "/" + item.type + "/" + item.name + ".svg" |
|
64 |
newItem.setIcon(0, QIcon(iconPath)) |
|
65 |
newItem.setData(0, self.TREE_DATA_ROLE, item) |
|
66 |
if self.root is not None: |
|
67 |
self.root.addChild(newItem) |
|
50 | 68 |
symbolSvgItemList.append(item) |
69 |
self.expandAll() |
|
51 | 70 |
self.lastSceneItems = symbolSvgItemList |
52 | 71 |
|
53 | 72 |
''' |
... | ... | |
59 | 78 |
lastClickedItem = None |
60 | 79 |
def itemClickEvent(self, item, columnNo): |
61 | 80 |
print("Item " + item.text(0) + " clicked") |
62 |
svgItem = item.data(0, Qt.ToolTipRole)
|
|
81 |
svgItem = item.data(0, self.TREE_DATA_ROLE)
|
|
63 | 82 |
if self.lastClickedItem is not None: |
64 | 83 |
self.scene.removeItem(self.lastClickedItem) |
65 | 84 |
## Draw rectangle on selected symbol |
... | ... | |
67 | 86 |
self.imageViewer.centerOn(QPointF(svgItem.loc[0], svgItem.loc[1])) |
68 | 87 |
## Send new event to imageViewer's zoomImage Method |
69 | 88 |
self.imageViewer.zoomImage(True, QMouseEvent(QEvent.MouseButtonPress, self.imageViewer.mapFromScene(QPointF(svgItem.loc[0], svgItem.loc[1])), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier), 3) |
70 |
self.lastClickedItem = graphicItem |
|
89 |
self.lastClickedItem = graphicItem |
|
90 |
|
|
91 |
@pyqtSlot(SymbolSvgItem) |
|
92 |
def findItem(self, item): |
|
93 |
if type(item) is SymbolSvgItem: |
|
94 |
foundItems = self.findItems(item.name, Qt.MatchExactly|Qt.MatchRecursive, 0) |
|
95 |
if foundItems is not None: |
|
96 |
for fItem in foundItems: |
|
97 |
data = fItem.data(0, self.TREE_DATA_ROLE) |
|
98 |
if data is not None and data == item: |
|
99 |
print("") |
DTI_PID/DTI_PID/Shapes/SymbolSvgItem.py | ||
---|---|---|
9 | 9 |
from PyQt5.QtWidgets import (QGraphicsItem) |
10 | 10 |
|
11 | 11 |
class SymbolSvgItem(QGraphicsSvgItem): |
12 |
clicked = pyqtSignal(QGraphicsSvgItem) |
|
13 |
|
|
12 | 14 |
''' |
13 |
@history 18.04.11 Jeongwoo Add Variable (Name) |
|
15 |
@history 18.04.11 Jeongwoo Add Variable (Name, Type)
|
|
14 | 16 |
''' |
15 | 17 |
def __init__(self, path): |
16 | 18 |
super(SymbolSvgItem, self).__init__(path) |
... | ... | |
19 | 21 |
#QGraphicsItem.ItemIsMovable) |
20 | 22 |
|
21 | 23 |
self.name = '' |
24 |
self.type = '' |
|
22 | 25 |
self.angle = 0 |
23 | 26 |
self.loc = None |
24 | 27 |
self.size = None |
25 | 28 |
|
26 | 29 |
self.setAcceptHoverEvents(True) |
30 |
self.setAcceptedMouseButtons(Qt.LeftButton) |
|
27 | 31 |
|
28 | 32 |
''' |
29 | 33 |
@brief return bounding box of symbol |
... | ... | |
58 | 62 |
print('Leave') |
59 | 63 |
|
60 | 64 |
def hoverMoveEvent(self, event): |
61 |
return #print('Moving') |
|
65 |
return #print('Moving') |
|
66 |
|
|
67 |
''' |
|
68 |
@brief Mouse Press Event |
|
69 |
@author Jeongwoo |
|
70 |
@date 18.04.11 |
|
71 |
@history . |
|
72 |
''' |
|
73 |
def mousePressEvent(self, event): |
|
74 |
print("Clicked!!!! " + self.name) |
|
75 |
self.clicked.emit(self) |
내보내기 Unified diff