개정판 6a2a7457
implementing issue #640:
- Add AttrEditor dialog
DTI_PID/DTI_PID/AttrEditorDialog.py | ||
---|---|---|
1 |
# coding: utf-8 |
|
2 |
import os |
|
3 |
import sys |
|
4 |
from PyQt5.QtCore import * |
|
5 |
from PyQt5.QtGui import * |
|
6 |
from PyQt5.QtWidgets import * |
|
7 |
import sqlite3 |
|
8 |
from AppDocData import AppDocData |
|
9 |
from AppDocData import Config |
|
10 |
import AttrEditor_UI |
|
11 | ||
12 |
class QAttrEditorDialog(QDialog): |
|
13 |
def __init__(self, parent): |
|
14 |
QDialog.__init__(self, parent) |
|
15 | ||
16 |
self.ui = AttrEditor_UI.Ui_AttrEditorDialog() |
|
17 |
self.ui.setupUi(self) |
|
18 | ||
19 |
self.ui.pushButtonAddAttr.clicked.connect(self.onAddAttr) |
|
20 |
self.ui.pushButtonDelAttr.clicked.connect(self.onDelAttr) |
|
21 | ||
22 |
self.ui.tableWidgetAttr.setHorizontalHeaderLabels(['Name', 'Type']) |
|
23 |
self.ui.tableWidgetAttr.horizontalHeaderItem(0).setSizeHint(QSize(25, 25)) |
|
24 | ||
25 |
''' |
|
26 |
@brief add a attribute |
|
27 |
@author humkyung |
|
28 |
@date 2018.08.13 |
|
29 |
''' |
|
30 |
def onAddAttr(self): |
|
31 |
rows = self.ui.tableWidgetAttr.rowCount() |
|
32 |
self.ui.tableWidgetAttr.setRowCount(rows + 1) |
|
33 | ||
34 |
attrTypeComboBox = QComboBox() |
|
35 |
attrTypeComboBox.addItem('Symbol Item') |
|
36 |
attrTypeComboBox.addItem('Text Item') |
|
37 |
attrTypeComboBox.addItem('Int') |
|
38 |
attrTypeComboBox.addItem('String') |
|
39 |
self.ui.tableWidgetAttr.setCellWidget(rows, 1, attrTypeComboBox) |
|
40 | ||
41 |
''' |
|
42 |
@brief delete selected attribute |
|
43 |
@author humkyung |
|
44 |
@date 2018.08.13 |
|
45 |
''' |
|
46 |
def onDelAttr(self): |
|
47 |
model = self.ui.tableWidgetAttr.model() |
|
48 | ||
49 |
row = self.ui.tableWidgetAttr.currentRow() |
|
50 |
if row != -1: |
|
51 |
model.removeRow(row) |
|
52 | ||
53 |
''' |
|
54 |
@brief save attributes |
|
55 |
@author humkyung |
|
56 |
@date 2018.08.13 |
|
57 |
''' |
|
58 |
def accept(self): |
|
59 |
QDialog.accept(self) |
DTI_PID/DTI_PID/AttrEditor_UI.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 | ||
3 |
# Form implementation generated from reading ui file '.\ui\AttrEditor.ui' |
|
4 |
# |
|
5 |
# Created by: PyQt5 UI code generator 5.10.1 |
|
6 |
# |
|
7 |
# WARNING! All changes made in this file will be lost! |
|
8 | ||
9 |
from PyQt5 import QtCore, QtGui, QtWidgets |
|
10 | ||
11 |
class Ui_AttrEditorDialog(object): |
|
12 |
def setupUi(self, AttrEditorDialog): |
|
13 |
AttrEditorDialog.setObjectName("AttrEditorDialog") |
|
14 |
AttrEditorDialog.resize(769, 300) |
|
15 |
font = QtGui.QFont() |
|
16 |
font.setFamily("맑은 고딕") |
|
17 |
font.setBold(True) |
|
18 |
font.setWeight(75) |
|
19 |
AttrEditorDialog.setFont(font) |
|
20 |
self.gridLayout = QtWidgets.QGridLayout(AttrEditorDialog) |
|
21 |
self.gridLayout.setObjectName("gridLayout") |
|
22 |
self.groupBox = QtWidgets.QGroupBox(AttrEditorDialog) |
|
23 |
self.groupBox.setObjectName("groupBox") |
|
24 |
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox) |
|
25 |
self.gridLayout_2.setObjectName("gridLayout_2") |
|
26 |
self.verticalLayout = QtWidgets.QVBoxLayout() |
|
27 |
self.verticalLayout.setObjectName("verticalLayout") |
|
28 |
self.horizontalLayout = QtWidgets.QHBoxLayout() |
|
29 |
self.horizontalLayout.setObjectName("horizontalLayout") |
|
30 |
self.labelSelectedSymbolType = QtWidgets.QLabel(self.groupBox) |
|
31 |
self.labelSelectedSymbolType.setObjectName("labelSelectedSymbolType") |
|
32 |
self.horizontalLayout.addWidget(self.labelSelectedSymbolType) |
|
33 |
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) |
|
34 |
self.horizontalLayout.addItem(spacerItem) |
|
35 |
self.pushButtonAddAttr = QtWidgets.QPushButton(self.groupBox) |
|
36 |
self.pushButtonAddAttr.setMaximumSize(QtCore.QSize(24, 16777215)) |
|
37 |
self.pushButtonAddAttr.setObjectName("pushButtonAddAttr") |
|
38 |
self.horizontalLayout.addWidget(self.pushButtonAddAttr, 0, QtCore.Qt.AlignRight) |
|
39 |
self.pushButtonDelAttr = QtWidgets.QPushButton(self.groupBox) |
|
40 |
self.pushButtonDelAttr.setMaximumSize(QtCore.QSize(24, 16777215)) |
|
41 |
self.pushButtonDelAttr.setObjectName("pushButtonDelAttr") |
|
42 |
self.horizontalLayout.addWidget(self.pushButtonDelAttr, 0, QtCore.Qt.AlignRight) |
|
43 |
self.verticalLayout.addLayout(self.horizontalLayout) |
|
44 |
self.horizontalLayout_2 = QtWidgets.QHBoxLayout() |
|
45 |
self.horizontalLayout_2.setObjectName("horizontalLayout_2") |
|
46 |
self.tableWidgetAttr = QtWidgets.QTableWidget(self.groupBox) |
|
47 |
self.tableWidgetAttr.setColumnCount(2) |
|
48 |
self.tableWidgetAttr.setObjectName("tableWidgetAttr") |
|
49 |
self.tableWidgetAttr.setRowCount(0) |
|
50 |
self.tableWidgetAttr.verticalHeader().setVisible(False) |
|
51 |
self.horizontalLayout_2.addWidget(self.tableWidgetAttr) |
|
52 |
self.verticalLayout.addLayout(self.horizontalLayout_2) |
|
53 |
self.gridLayout_2.addLayout(self.verticalLayout, 0, 0, 1, 1) |
|
54 |
self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1) |
|
55 |
self.buttonBox = QtWidgets.QDialogButtonBox(AttrEditorDialog) |
|
56 |
self.buttonBox.setOrientation(QtCore.Qt.Horizontal) |
|
57 |
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) |
|
58 |
self.buttonBox.setObjectName("buttonBox") |
|
59 |
self.gridLayout.addWidget(self.buttonBox, 1, 0, 1, 1) |
|
60 | ||
61 |
self.retranslateUi(AttrEditorDialog) |
|
62 |
self.buttonBox.accepted.connect(AttrEditorDialog.accept) |
|
63 |
self.buttonBox.rejected.connect(AttrEditorDialog.reject) |
|
64 |
QtCore.QMetaObject.connectSlotsByName(AttrEditorDialog) |
|
65 | ||
66 |
def retranslateUi(self, AttrEditorDialog): |
|
67 |
_translate = QtCore.QCoreApplication.translate |
|
68 |
AttrEditorDialog.setWindowTitle(_translate("AttrEditorDialog", "속성 편집")) |
|
69 |
self.groupBox.setTitle(_translate("AttrEditorDialog", "속성")) |
|
70 |
self.labelSelectedSymbolType.setText(_translate("AttrEditorDialog", "Selected Symbol Type")) |
|
71 |
self.pushButtonAddAttr.setText(_translate("AttrEditorDialog", "+")) |
|
72 |
self.pushButtonDelAttr.setText(_translate("AttrEditorDialog", "-")) |
|
73 | ||
74 | ||
75 |
if __name__ == "__main__": |
|
76 |
import sys |
|
77 |
app = QtWidgets.QApplication(sys.argv) |
|
78 |
AttrEditorDialog = QtWidgets.QDialog() |
|
79 |
ui = Ui_AttrEditorDialog() |
|
80 |
ui.setupUi(AttrEditorDialog) |
|
81 |
AttrEditorDialog.show() |
|
82 |
sys.exit(app.exec_()) |
|
83 |
DTI_PID/DTI_PID/DTI_PID.pyproj | ||
---|---|---|
73 | 73 |
<Compile Include="QInstrumentDataListDialog.py" /> |
74 | 74 |
<Compile Include="QLineDataListDialog.py" /> |
75 | 75 |
<Compile Include="OcrResultDialog.py" /> |
76 |
<Compile Include="PropertyTableWidget.py" /> |
|
76 |
<Compile Include="SymbolPropertyTableWidget.py" />
|
|
77 | 77 |
<Compile Include="QRecognitionDialog.py" /> |
78 | 78 |
<Compile Include="ItemPropertyTableWidget.py" /> |
79 | 79 |
<Compile Include="ItemTreeWidget.py" /> |
DTI_PID/DTI_PID/MainWindow.py | ||
---|---|---|
37 | 37 |
from QEngineeringSizeTextItem import QEngineeringSizeTextItem |
38 | 38 |
from EngineeringUnknownItem import QEngineeringUnknownItem |
39 | 39 |
from AppDocData import * |
40 |
import SymbolTreeWidget, PropertyTableWidget |
|
40 |
import SymbolTreeWidget, SymbolPropertyTableWidget
|
|
41 | 41 |
import SymbolEditorDialog |
42 | 42 |
import ItemTreeWidget |
43 | 43 |
import ItemPropertyTableWidget |
... | ... | |
88 | 88 |
self.symbolTabVerticalLayout.addWidget(self.dirTreeWidget) |
89 | 89 | |
90 | 90 |
# Add Custom Property TableWidget |
91 |
self.propertyTableWidget = PropertyTableWidget.QPropertyTableWidget()
|
|
91 |
self.propertyTableWidget = SymbolPropertyTableWidget.QSymbolPropertyTableWidget()
|
|
92 | 92 |
self.symbolTabVerticalLayout.addWidget(self.propertyTableWidget) |
93 | 93 |
self.dirTreeWidget.singleClicked.connect(self.propertyTableWidget.getClickedSymbol) |
94 | 94 |
# add splitter widget |
DTI_PID/DTI_PID/PropertyTableWidget.py | ||
---|---|---|
1 |
try: |
|
2 |
from PyQt5.QtCore import * |
|
3 |
from PyQt5.QtGui import * |
|
4 |
from PyQt5.QtWidgets import * |
|
5 |
except ImportError: |
|
6 |
try: |
|
7 |
from PyQt4.QtCore import * |
|
8 |
from PyQt4.QtGui import * |
|
9 |
except ImportError: |
|
10 |
raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.") |
|
11 |
from AppDocData import AppDocData |
|
12 |
import os |
|
13 |
import SymbolBase |
|
14 |
import symbol |
|
15 | ||
16 |
class QPropertyTableWidget(QTableWidget): |
|
17 |
def __init__(self): |
|
18 |
QTableWidget.__init__(self) |
|
19 |
self.project = AppDocData.instance().getCurrentProject() |
|
20 |
self.initPropertyTableWidget() |
|
21 |
self.symData = None |
|
22 | ||
23 |
''' |
|
24 |
@auther Yecheol |
|
25 |
@date 2018-07-04 |
|
26 |
@history Add Instrument Label YN Column |
|
27 |
humkyung 2018.07.08 show column header |
|
28 |
''' |
|
29 | ||
30 |
def initPropertyTableWidget(self): |
|
31 |
self.setColumnCount(2) |
|
32 |
self.setHorizontalHeaderLabels(['Name', 'Value']) |
|
33 |
self.horizontalHeaderItem(0).setSizeHint(QSize(25, 25)) |
|
34 |
self.setRowCount(12) |
|
35 |
self.verticalHeader().hide() |
|
36 |
self.horizontalHeader().setStretchLastSection(True) |
|
37 |
self.initTitleCell() |
|
38 | ||
39 |
### Rotation Count SpinBox Init |
|
40 |
rotationCountSpinBox = QSpinBox() |
|
41 |
rotationCountSpinBox.setRange(0, 3) |
|
42 |
rotationCountSpinBox.setSingleStep(1) |
|
43 |
rotationCountSpinBox.setValue(0) |
|
44 |
rotationCountSpinBox.setEnabled(False) |
|
45 |
self.setCellWidget(3, 1, rotationCountSpinBox) |
|
46 | ||
47 |
### IsContainChild CheckBox Init |
|
48 |
isContainChildCheckBox = QCheckBox() |
|
49 |
isContainChildCheckBox.setEnabled(False) |
|
50 |
self.setCellWidget(4, 1, isContainChildCheckBox) |
|
51 | ||
52 |
### Symbol Type ComboBox Init |
|
53 |
symbolTypeComboBox = QComboBox() |
|
54 |
for name in AppDocData.instance().getSymbolTypeComboBoxItems(): |
|
55 |
symbolTypeComboBox.addItem(name) |
|
56 |
symbolTypeComboBox.setEnabled(False) |
|
57 |
self.setCellWidget(5, 1, symbolTypeComboBox) |
|
58 | ||
59 |
### Base Symbol ComboBox Init |
|
60 |
baseSymbolComboBox = QComboBox() |
|
61 |
for name in AppDocData.instance().getBaseSymbolComboBoxItems(): |
|
62 |
baseSymbolComboBox.addItem(name) |
|
63 |
baseSymbolComboBox.setEnabled(False) |
|
64 |
self.setCellWidget(6, 1, baseSymbolComboBox) |
|
65 | ||
66 |
### IsExceptDetect CheckBox Init |
|
67 |
isExceptDetectCheckBox = QCheckBox() |
|
68 |
isExceptDetectCheckBox.setEnabled(False) |
|
69 |
self.setCellWidget(10, 1, isExceptDetectCheckBox) |
|
70 | ||
71 |
### hasInstrumentLabel CheckBox Init |
|
72 |
hasInstrumentLabelCheckBox = QCheckBox() |
|
73 |
hasInstrumentLabelCheckBox.setEnabled(False) |
|
74 |
self.setCellWidget(11, 1, hasInstrumentLabelCheckBox) |
|
75 | ||
76 |
''' |
|
77 |
@brief Init contents and background color in Title cell |
|
78 |
''' |
|
79 |
def initTitleCell(self): |
|
80 |
#self.setItem(0, 0, QTableWidgetItem("심볼ID")) |
|
81 |
#self.setItem(0, 0, QTableWidgetItem("심볼명")) |
|
82 |
#self.setItem(1, 0, QTableWidgetItem("임계값(%)")) |
|
83 |
#self.setItem(2, 0, QTableWidgetItem("최소 특징점 수")) |
|
84 |
#self.setItem(3, 0, QTableWidgetItem("검출 시 심볼 회전 수")) |
|
85 |
#self.setItem(4, 0, QTableWidgetItem("자식 심볼 포함 여부")) |
|
86 |
#self.setItem(5, 0, QTableWidgetItem("심볼 타입")) |
|
87 |
#self.setItem(6, 0, QTableWidgetItem("기초 심볼")) |
|
88 |
#self.setItem(7, 0, QTableWidgetItem("부가 심볼")) |
|
89 |
#self.setItem(8, 0, QTableWidgetItem("Original Point")) |
|
90 |
#self.setItem(9, 0, QTableWidgetItem("Connection Point")) |
|
91 |
#self.setItem(10, 0, QTableWidgetItem("검출 시 미포함 여부")) |
|
92 |
#self.setItem(11, 0, QTableWidgetItem("Instrument Label 여부")) |
|
93 | ||
94 |
item1 = QTableWidgetItem("심볼명") |
|
95 |
item1.setFlags(Qt.ItemIsEnabled) |
|
96 |
self.setItem(0, 0, item1) |
|
97 | ||
98 |
item2 = QTableWidgetItem("임계값(%)") |
|
99 |
item2.setFlags(Qt.ItemIsEnabled) |
|
100 |
self.setItem(1, 0, item2) |
|
101 | ||
102 |
item3 = QTableWidgetItem("최소 특징점 수") |
|
103 |
item3.setFlags(Qt.ItemIsEnabled) |
|
104 |
self.setItem(2, 0, item3) |
|
105 | ||
106 |
item4 = QTableWidgetItem("검출 시 심볼 회전 수") |
|
107 |
item4.setFlags(Qt.ItemIsEnabled) |
|
108 |
self.setItem(3, 0, item4) |
|
109 | ||
110 |
item5 = QTableWidgetItem("자식 심볼 포함 여부") |
|
111 |
item5.setFlags(Qt.ItemIsEnabled) |
|
112 |
self.setItem(4, 0, item5) |
|
113 | ||
114 |
item6 = QTableWidgetItem("심볼 타입") |
|
115 |
item6.setFlags(Qt.ItemIsEnabled) |
|
116 |
self.setItem(5, 0, item6) |
|
117 | ||
118 |
item7 = QTableWidgetItem("기초 심볼") |
|
119 |
item7.setFlags(Qt.ItemIsEnabled) |
|
120 |
self.setItem(6, 0, item7) |
|
121 | ||
122 |
item8 = QTableWidgetItem("부가 심볼") |
|
123 |
item8.setFlags(Qt.ItemIsEnabled) |
|
124 |
self.setItem(7, 0, item8) |
|
125 | ||
126 |
item9 = QTableWidgetItem("Original Point") |
|
127 |
item9.setFlags(Qt.ItemIsEnabled) |
|
128 |
self.setItem(8, 0, item9) |
|
129 | ||
130 |
item10 = QTableWidgetItem("Connection Point") |
|
131 |
item10.setFlags(Qt.ItemIsEnabled) |
|
132 |
self.setItem(9, 0, item10) |
|
133 | ||
134 |
item11 = QTableWidgetItem("검출 시 미포함 여부") |
|
135 |
item11.setFlags(Qt.ItemIsEnabled) |
|
136 |
self.setItem(10, 0, item11) |
|
137 | ||
138 |
item12 = QTableWidgetItem("Ins't 라벨 포함 여부") |
|
139 |
item12.setFlags(Qt.ItemIsEnabled) |
|
140 |
self.setItem(11, 0, item12) |
|
141 | ||
142 |
for index in range(self.rowCount()): |
|
143 |
self.item(index, 0).setBackground(QColor(220, 220, 220)) |
|
144 | ||
145 |
def makeConnection(self, dirTreeWidget): |
|
146 |
dirTreeWidget.singleClicked.connect(self.getClickedSymbol) |
|
147 | ||
148 |
''' |
|
149 |
@history 18.04.24 Jeongwoo If symbol.getId == -1: symData = None |
|
150 |
''' |
|
151 |
@pyqtSlot(SymbolBase.SymbolBase) |
|
152 |
def getClickedSymbol(self, symbol): |
|
153 |
if self.symData != symbol: |
|
154 |
self.symData = symbol #if symbol.getId() != -1 else None |
|
155 |
self.symbolChanged() |
|
156 | ||
157 |
''' |
|
158 |
@brief Set symbol data on TableWidget |
|
159 |
TableWidgetItem handles only string value |
|
160 |
@history 18.04.24 Jeongwoo Add 14th row(isExceptDetect CheckBox) |
|
161 |
''' |
|
162 |
def symbolChanged(self): |
|
163 |
if self.symData.baseSymbol is not None: |
|
164 |
#self.setItem(0, 1, QTableWidgetItem(str(self.symData.getId()))) |
|
165 |
#self.setItem(0, 1, QTableWidgetItem(self.symData.getName())) |
|
166 |
#self.setItem(1, 1, QTableWidgetItem(str(int(self.symData.getThreshold() * 100)))) |
|
167 |
#self.setItem(2, 1, QTableWidgetItem(str(self.symData.getMinMatchCount()))) |
|
168 | ||
169 |
Symboldata = QTableWidgetItem(self.symData.getName()) |
|
170 |
Symboldata.setFlags(Qt.ItemIsEnabled) |
|
171 |
self.setItem(0, 1, Symboldata) |
|
172 | ||
173 |
SymbolThreshold = QTableWidgetItem(str(self.symData.getThreshold() *100)) |
|
174 |
SymbolThreshold.setFlags(Qt.ItemIsEnabled) |
|
175 |
self.setItem(1, 1, SymbolThreshold) |
|
176 | ||
177 |
SymbolMinMatchCount = QTableWidgetItem(str(self.symData.getMinMatchCount())) |
|
178 |
SymbolMinMatchCount.setFlags(Qt.ItemIsEnabled) |
|
179 |
self.setItem(2, 1, SymbolMinMatchCount) |
|
180 | ||
181 |
rotationCountSpinBox = self.cellWidget(3, 1) |
|
182 |
rotationCountSpinBox.setValue(self.symData.getRotationCount()) |
|
183 | ||
184 |
isContainChildCheckBox = self.cellWidget(4, 1) |
|
185 |
isContainChildCheckBox.setChecked(True if self.symData.getIsContainChild() == 1 else False) |
|
186 | ||
187 |
symbolTypeComboBox = self.cellWidget(5, 1) |
|
188 |
symbolTypeComboBox.setCurrentIndex(symbolTypeComboBox.findText(self.symData.getType())) ##### USED FIND TEXT |
|
189 |
|
|
190 |
baseSymbolComboBox = self.cellWidget(6, 1) |
|
191 |
baseSymbolComboBox.clear() |
|
192 |
for name in AppDocData.instance().getBaseSymbolComboBoxItems(self.symData.getType()): |
|
193 |
baseSymbolComboBox.addItem(name) |
|
194 |
baseSymbolComboBox.setCurrentIndex(baseSymbolComboBox.findText(self.symData.getBaseSymbol())) ##### USED FIND TEXT |
|
195 | ||
196 |
additionalSymbolItem = QTableWidgetItem(self.symData.getAdditionalSymbol()) |
|
197 |
additionalSymbolItem.setFlags(Qt.ItemIsEnabled) |
|
198 |
self.setItem(7, 1, additionalSymbolItem) |
|
199 | ||
200 |
originalPointItem = QTableWidgetItem(self.symData.getOriginalPoint()) |
|
201 |
originalPointItem.setFlags(Qt.ItemIsEnabled) |
|
202 |
self.setItem(8, 1, originalPointItem) |
|
203 | ||
204 |
connectionPointItem = QTableWidgetItem(self.symData.getConnectionPoint()) |
|
205 |
connectionPointItem.setFlags(Qt.ItemIsEnabled) |
|
206 |
self.setItem(9, 1, connectionPointItem) |
|
207 |
|
|
208 |
isExceptDetectCheckBox = self.cellWidget(10, 1) |
|
209 |
isExceptDetectCheckBox.setChecked(True if self.symData.getIsExceptDetect() == 1 else False) |
|
210 | ||
211 |
hasInstrumentLabelCheckBox = self.cellWidget(11, 1) |
|
212 |
hasInstrumentLabelCheckBox.setChecked(True if self.symData.getHasInstrumentLabel() == 1 else False) |
|
213 | ||
214 |
else: |
|
215 |
#self.setItem(0, 1, QTableWidgetItem("")) |
|
216 |
#self.setItem(0, 1, QTableWidgetItem("")) |
|
217 |
#self.setItem(1, 1, QTableWidgetItem("")) |
|
218 |
#self.setItem(2, 1, QTableWidgetItem("")) |
|
219 | ||
220 |
item1 = QTableWidgetItem("") |
|
221 |
item1.setFlags(Qt.ItemIsEnabled) |
|
222 |
self.setItem(0, 1, item1) |
|
223 | ||
224 |
item2 = QTableWidgetItem("") |
|
225 |
item2.setFlags(Qt.ItemIsEnabled) |
|
226 |
self.setItem(1, 1, item2) |
|
227 | ||
228 |
item3 = QTableWidgetItem("") |
|
229 |
item3.setFlags(Qt.ItemIsEnabled) |
|
230 |
self.setItem(2, 1, item3) |
|
231 | ||
232 | ||
233 |
rotationCountSpinBox = self.cellWidget(3, 1) |
|
234 |
rotationCountSpinBox.setValue(0) |
|
235 | ||
236 |
isContainChildCheckBox = self.cellWidget(4, 1) |
|
237 |
isContainChildCheckBox.setChecked(False) |
|
238 | ||
239 |
symbolTypeComboBox = self.cellWidget(5, 1) |
|
240 |
symbolTypeComboBox.setCurrentIndex(0) |
|
241 | ||
242 |
baseSymbolComboBox = self.cellWidget(6, 1) |
|
243 |
baseSymbolComboBox.setCurrentIndex(0) |
|
244 | ||
245 |
additionalSymbolItem = QTableWidgetItem("") |
|
246 |
additionalSymbolItem.setFlags(Qt.ItemIsEnabled) |
|
247 |
self.setItem(7, 1, additionalSymbolItem) |
|
248 | ||
249 |
originalPointItem = QTableWidgetItem("") |
|
250 |
originalPointItem.setFlags(Qt.ItemIsEnabled) |
|
251 |
self.setItem(8, 1, originalPointItem) |
|
252 | ||
253 |
connectionPointItem = QTableWidgetItem("") |
|
254 |
connectionPointItem.setFlags(Qt.ItemIsEnabled) |
|
255 |
self.setItem(9, 1, connectionPointItem) |
|
256 |
|
|
257 |
isExceptDetectCheckBox = self.cellWidget(10, 1) |
|
258 |
isExceptDetectCheckBox.setChecked(False) |
|
259 | ||
260 |
hasInstrumentLabelCheckBox = self.cellWidget(11, 1) |
|
261 |
hasInstrumentLabelCheckBox.setChecked(False) |
DTI_PID/DTI_PID/READ ME.txt | ||
---|---|---|
99 | 99 |
- �ɺ��� ������� ���콺 ���� Ŭ���� ��� [����, ũ�Ժ���, ����] �� ������ Context Menu ǥ�� |
100 | 100 |
- ��µǴ� �ɺ� �̹����� Symbol Type �� ���� Tree ���� |
101 | 101 |
- �ɺ��� ������� ���� Ŭ�� �� SymbolEditorDialog ǥ�� |
102 |
- �ɺ��� ������� Ŭ�� �� �ϴ� QPropertyTableWidget �� �ɺ� ���� ��� |
|
102 |
- �ɺ��� ������� Ŭ�� �� �ϴ� QSymbolPropertyTableWidget �� �ɺ� ���� ���
|
|
103 | 103 |
- �ɺ� �巡��, ��� �� QtImageViewer �� �ɺ� ���� |
104 | 104 | |
105 | 105 |
12) OcrResultDialog.py |
... | ... | |
108 | 108 |
- 90�� ���� ȸ���� �����ϸ�, ������ �ؽ�Ʈ�� ���������� ȸ���Ͽ� ��ġ�� �� Re-Detect ��ư�� Ŭ���� �� �ؽ�Ʈ ���� |
109 | 109 |
- Ȯ�� ��ư Ŭ�� �� ����� �ؽ�Ʈ�� ����, ȸ�� ������ ������ TextInfo ��ȯ |
110 | 110 | |
111 |
13) QPropertyTableWidget.py |
|
111 |
13) QSymbolPropertyTableWidget.py
|
|
112 | 112 |
- SymbolTreeWidget ���� ���õ� �ɺ��� ������ ��� |
113 | 113 |
- TableWidget���� ���� �� Database�� ��� �ݿ��ϴ� ��ȹ�� �־�����, ��� �����Ƿ� ���� ���� ������ |
114 | 114 |
DTI_PID/DTI_PID/Shapes/EngineeringLineItem.py | ||
---|---|---|
818 | 818 |
def hoverEnterEvent(self, event): |
819 | 819 |
self._savedColor = self.getColor() |
820 | 820 |
self.setColor(QEngineeringLineItem.HIGHLIGHT) |
821 |
self.update() |
|
821 | ||
822 |
rect = self.sceneBoundingRect() |
|
823 |
rect.setRect(rect.left() - QEngineeringLineItem.ARROW_SIZE, rect.top() - QEngineeringLineItem.ARROW_SIZE, |
|
824 |
rect.width() + QEngineeringLineItem.ARROW_SIZE*2, rect.height() + QEngineeringLineItem.ARROW_SIZE*2) |
|
825 |
self.scene().invalidate(rect) |
|
822 | 826 | |
823 | 827 |
def hoverLeaveEvent(self, event): |
824 | 828 |
self.setColor(self._savedColor) |
825 |
self.update() |
|
829 | ||
830 |
rect = self.sceneBoundingRect() |
|
831 |
rect.setRect(rect.left() - QEngineeringLineItem.ARROW_SIZE, rect.top() - QEngineeringLineItem.ARROW_SIZE, |
|
832 |
rect.width() + QEngineeringLineItem.ARROW_SIZE*2, rect.height() + QEngineeringLineItem.ARROW_SIZE*2) |
|
833 |
self.scene().invalidate(rect) |
|
834 | ||
826 | 835 | |
827 | 836 |
def hoverMoveEvent(self, event): |
828 | 837 |
pass |
DTI_PID/DTI_PID/SmartFEED.nsi | ||
---|---|---|
3709 | 3709 |
Delete "$INSTDIR\PyQt5\Qt\plugins\iconengines\qsvgicon.dll" |
3710 | 3710 |
Delete "$INSTDIR\PyQt5\Qt\bin\qt.conf" |
3711 | 3711 |
Delete "$INSTDIR\pyexpat.pyd" |
3712 |
Delete "$INSTDIR\PropertyTableWidget.py" |
|
3712 |
Delete "$INSTDIR\SymbolPropertyTableWidget.py"
|
|
3713 | 3713 |
Delete "$INSTDIR\Project_UI.py" |
3714 | 3714 |
Delete "$INSTDIR\ProjectDialog.py" |
3715 | 3715 |
Delete "$INSTDIR\Project.py" |
DTI_PID/DTI_PID/SymbolPropertyTableWidget.py | ||
---|---|---|
1 |
try: |
|
2 |
from PyQt5.QtCore import * |
|
3 |
from PyQt5.QtGui import * |
|
4 |
from PyQt5.QtWidgets import * |
|
5 |
except ImportError: |
|
6 |
try: |
|
7 |
from PyQt4.QtCore import * |
|
8 |
from PyQt4.QtGui import * |
|
9 |
except ImportError: |
|
10 |
raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.") |
|
11 |
from AppDocData import AppDocData |
|
12 |
import os |
|
13 |
import SymbolBase |
|
14 |
import symbol |
|
15 | ||
16 |
class QSymbolPropertyTableWidget(QTableWidget): |
|
17 |
def __init__(self): |
|
18 |
QTableWidget.__init__(self) |
|
19 |
self.project = AppDocData.instance().getCurrentProject() |
|
20 |
self.initPropertyTableWidget() |
|
21 |
self.symData = None |
|
22 | ||
23 |
''' |
|
24 |
@auther Yecheol |
|
25 |
@date 2018-07-04 |
|
26 |
@history Add Instrument Label YN Column |
|
27 |
humkyung 2018.07.08 show column header |
|
28 |
''' |
|
29 | ||
30 |
def initPropertyTableWidget(self): |
|
31 |
self.setColumnCount(2) |
|
32 |
self.setHorizontalHeaderLabels(['Name', 'Value']) |
|
33 |
self.horizontalHeaderItem(0).setSizeHint(QSize(25, 25)) |
|
34 |
self.setRowCount(12) |
|
35 |
self.verticalHeader().hide() |
|
36 |
self.horizontalHeader().setStretchLastSection(True) |
|
37 |
self.initTitleCell() |
|
38 | ||
39 |
### Rotation Count SpinBox Init |
|
40 |
rotationCountSpinBox = QSpinBox() |
|
41 |
rotationCountSpinBox.setRange(0, 3) |
|
42 |
rotationCountSpinBox.setSingleStep(1) |
|
43 |
rotationCountSpinBox.setValue(0) |
|
44 |
rotationCountSpinBox.setEnabled(False) |
|
45 |
self.setCellWidget(3, 1, rotationCountSpinBox) |
|
46 | ||
47 |
### IsContainChild CheckBox Init |
|
48 |
isContainChildCheckBox = QCheckBox() |
|
49 |
isContainChildCheckBox.setEnabled(False) |
|
50 |
self.setCellWidget(4, 1, isContainChildCheckBox) |
|
51 | ||
52 |
### Symbol Type ComboBox Init |
|
53 |
symbolTypeComboBox = QComboBox() |
|
54 |
for name in AppDocData.instance().getSymbolTypeComboBoxItems(): |
|
55 |
symbolTypeComboBox.addItem(name) |
|
56 |
symbolTypeComboBox.setEnabled(False) |
|
57 |
self.setCellWidget(5, 1, symbolTypeComboBox) |
|
58 | ||
59 |
### Base Symbol ComboBox Init |
|
60 |
baseSymbolComboBox = QComboBox() |
|
61 |
for name in AppDocData.instance().getBaseSymbolComboBoxItems(): |
|
62 |
baseSymbolComboBox.addItem(name) |
|
63 |
baseSymbolComboBox.setEnabled(False) |
|
64 |
self.setCellWidget(6, 1, baseSymbolComboBox) |
|
65 | ||
66 |
### IsExceptDetect CheckBox Init |
|
67 |
isExceptDetectCheckBox = QCheckBox() |
|
68 |
isExceptDetectCheckBox.setEnabled(False) |
|
69 |
self.setCellWidget(10, 1, isExceptDetectCheckBox) |
|
70 | ||
71 |
### hasInstrumentLabel CheckBox Init |
|
72 |
hasInstrumentLabelCheckBox = QCheckBox() |
|
73 |
hasInstrumentLabelCheckBox.setEnabled(False) |
|
74 |
self.setCellWidget(11, 1, hasInstrumentLabelCheckBox) |
|
75 | ||
76 |
''' |
|
77 |
@brief Init contents and background color in Title cell |
|
78 |
''' |
|
79 |
def initTitleCell(self): |
|
80 |
#self.setItem(0, 0, QTableWidgetItem("심볼ID")) |
|
81 |
#self.setItem(0, 0, QTableWidgetItem("심볼명")) |
|
82 |
#self.setItem(1, 0, QTableWidgetItem("임계값(%)")) |
|
83 |
#self.setItem(2, 0, QTableWidgetItem("최소 특징점 수")) |
|
84 |
#self.setItem(3, 0, QTableWidgetItem("검출 시 심볼 회전 수")) |
|
85 |
#self.setItem(4, 0, QTableWidgetItem("자식 심볼 포함 여부")) |
|
86 |
#self.setItem(5, 0, QTableWidgetItem("심볼 타입")) |
|
87 |
#self.setItem(6, 0, QTableWidgetItem("기초 심볼")) |
|
88 |
#self.setItem(7, 0, QTableWidgetItem("부가 심볼")) |
|
89 |
#self.setItem(8, 0, QTableWidgetItem("Original Point")) |
|
90 |
#self.setItem(9, 0, QTableWidgetItem("Connection Point")) |
|
91 |
#self.setItem(10, 0, QTableWidgetItem("검출 시 미포함 여부")) |
|
92 |
#self.setItem(11, 0, QTableWidgetItem("Instrument Label 여부")) |
|
93 | ||
94 |
item1 = QTableWidgetItem("심볼명") |
|
95 |
item1.setFlags(Qt.ItemIsEnabled) |
|
96 |
self.setItem(0, 0, item1) |
|
97 | ||
98 |
item2 = QTableWidgetItem("임계값(%)") |
|
99 |
item2.setFlags(Qt.ItemIsEnabled) |
|
100 |
self.setItem(1, 0, item2) |
|
101 | ||
102 |
item3 = QTableWidgetItem("최소 특징점 수") |
|
103 |
item3.setFlags(Qt.ItemIsEnabled) |
|
104 |
self.setItem(2, 0, item3) |
|
105 | ||
106 |
item4 = QTableWidgetItem("검출 시 심볼 회전 수") |
|
107 |
item4.setFlags(Qt.ItemIsEnabled) |
|
108 |
self.setItem(3, 0, item4) |
|
109 | ||
110 |
item5 = QTableWidgetItem("자식 심볼 포함 여부") |
|
111 |
item5.setFlags(Qt.ItemIsEnabled) |
|
112 |
self.setItem(4, 0, item5) |
|
113 | ||
114 |
item6 = QTableWidgetItem("심볼 타입") |
|
115 |
item6.setFlags(Qt.ItemIsEnabled) |
|
116 |
self.setItem(5, 0, item6) |
|
117 | ||
118 |
item7 = QTableWidgetItem("기초 심볼") |
|
119 |
item7.setFlags(Qt.ItemIsEnabled) |
|
120 |
self.setItem(6, 0, item7) |
|
121 | ||
122 |
item8 = QTableWidgetItem("부가 심볼") |
|
123 |
item8.setFlags(Qt.ItemIsEnabled) |
|
124 |
self.setItem(7, 0, item8) |
|
125 | ||
126 |
item9 = QTableWidgetItem("Original Point") |
|
127 |
item9.setFlags(Qt.ItemIsEnabled) |
|
128 |
self.setItem(8, 0, item9) |
|
129 | ||
130 |
item10 = QTableWidgetItem("Connection Point") |
|
131 |
item10.setFlags(Qt.ItemIsEnabled) |
|
132 |
self.setItem(9, 0, item10) |
|
133 | ||
134 |
item11 = QTableWidgetItem("검출 시 미포함 여부") |
|
135 |
item11.setFlags(Qt.ItemIsEnabled) |
|
136 |
self.setItem(10, 0, item11) |
|
137 | ||
138 |
item12 = QTableWidgetItem("Ins't 라벨 포함 여부") |
|
139 |
item12.setFlags(Qt.ItemIsEnabled) |
|
140 |
self.setItem(11, 0, item12) |
|
141 | ||
142 |
for index in range(self.rowCount()): |
|
143 |
self.item(index, 0).setBackground(QColor(220, 220, 220)) |
|
144 | ||
145 |
def makeConnection(self, dirTreeWidget): |
|
146 |
dirTreeWidget.singleClicked.connect(self.getClickedSymbol) |
|
147 | ||
148 |
''' |
|
149 |
@history 18.04.24 Jeongwoo If symbol.getId == -1: symData = None |
|
150 |
''' |
|
151 |
@pyqtSlot(SymbolBase.SymbolBase) |
|
152 |
def getClickedSymbol(self, symbol): |
|
153 |
if self.symData != symbol: |
|
154 |
self.symData = symbol #if symbol.getId() != -1 else None |
|
155 |
self.symbolChanged() |
|
156 | ||
157 |
''' |
|
158 |
@brief Set symbol data on TableWidget |
|
159 |
TableWidgetItem handles only string value |
|
160 |
@history 18.04.24 Jeongwoo Add 14th row(isExceptDetect CheckBox) |
|
161 |
''' |
|
162 |
def symbolChanged(self): |
|
163 |
if self.symData.baseSymbol is not None: |
|
164 |
#self.setItem(0, 1, QTableWidgetItem(str(self.symData.getId()))) |
|
165 |
#self.setItem(0, 1, QTableWidgetItem(self.symData.getName())) |
|
166 |
#self.setItem(1, 1, QTableWidgetItem(str(int(self.symData.getThreshold() * 100)))) |
|
167 |
#self.setItem(2, 1, QTableWidgetItem(str(self.symData.getMinMatchCount()))) |
|
168 | ||
169 |
Symboldata = QTableWidgetItem(self.symData.getName()) |
|
170 |
Symboldata.setFlags(Qt.ItemIsEnabled) |
|
171 |
self.setItem(0, 1, Symboldata) |
|
172 | ||
173 |
SymbolThreshold = QTableWidgetItem(str(self.symData.getThreshold() *100)) |
|
174 |
SymbolThreshold.setFlags(Qt.ItemIsEnabled) |
|
175 |
self.setItem(1, 1, SymbolThreshold) |
|
176 | ||
177 |
SymbolMinMatchCount = QTableWidgetItem(str(self.symData.getMinMatchCount())) |
|
178 |
SymbolMinMatchCount.setFlags(Qt.ItemIsEnabled) |
|
179 |
self.setItem(2, 1, SymbolMinMatchCount) |
|
180 | ||
181 |
rotationCountSpinBox = self.cellWidget(3, 1) |
|
182 |
rotationCountSpinBox.setValue(self.symData.getRotationCount()) |
|
183 | ||
184 |
isContainChildCheckBox = self.cellWidget(4, 1) |
|
185 |
isContainChildCheckBox.setChecked(True if self.symData.getIsContainChild() == 1 else False) |
|
186 | ||
187 |
symbolTypeComboBox = self.cellWidget(5, 1) |
|
188 |
symbolTypeComboBox.setCurrentIndex(symbolTypeComboBox.findText(self.symData.getType())) ##### USED FIND TEXT |
|
189 |
|
|
190 |
baseSymbolComboBox = self.cellWidget(6, 1) |
|
191 |
baseSymbolComboBox.clear() |
|
192 |
for name in AppDocData.instance().getBaseSymbolComboBoxItems(self.symData.getType()): |
|
193 |
baseSymbolComboBox.addItem(name) |
|
194 |
baseSymbolComboBox.setCurrentIndex(baseSymbolComboBox.findText(self.symData.getBaseSymbol())) ##### USED FIND TEXT |
|
195 | ||
196 |
additionalSymbolItem = QTableWidgetItem(self.symData.getAdditionalSymbol()) |
|
197 |
additionalSymbolItem.setFlags(Qt.ItemIsEnabled) |
|
198 |
self.setItem(7, 1, additionalSymbolItem) |
|
199 | ||
200 |
originalPointItem = QTableWidgetItem(self.symData.getOriginalPoint()) |
|
201 |
originalPointItem.setFlags(Qt.ItemIsEnabled) |
|
202 |
self.setItem(8, 1, originalPointItem) |
|
203 | ||
204 |
connectionPointItem = QTableWidgetItem(self.symData.getConnectionPoint()) |
|
205 |
connectionPointItem.setFlags(Qt.ItemIsEnabled) |
|
206 |
self.setItem(9, 1, connectionPointItem) |
|
207 |
|
|
208 |
isExceptDetectCheckBox = self.cellWidget(10, 1) |
|
209 |
isExceptDetectCheckBox.setChecked(True if self.symData.getIsExceptDetect() == 1 else False) |
|
210 | ||
211 |
hasInstrumentLabelCheckBox = self.cellWidget(11, 1) |
|
212 |
hasInstrumentLabelCheckBox.setChecked(True if self.symData.getHasInstrumentLabel() == 1 else False) |
|
213 | ||
214 |
else: |
|
215 |
#self.setItem(0, 1, QTableWidgetItem("")) |
|
216 |
#self.setItem(0, 1, QTableWidgetItem("")) |
|
217 |
#self.setItem(1, 1, QTableWidgetItem("")) |
|
218 |
#self.setItem(2, 1, QTableWidgetItem("")) |
|
219 | ||
220 |
item1 = QTableWidgetItem("") |
|
221 |
item1.setFlags(Qt.ItemIsEnabled) |
|
222 |
self.setItem(0, 1, item1) |
|
223 | ||
224 |
item2 = QTableWidgetItem("") |
|
225 |
item2.setFlags(Qt.ItemIsEnabled) |
|
226 |
self.setItem(1, 1, item2) |
|
227 | ||
228 |
item3 = QTableWidgetItem("") |
|
229 |
item3.setFlags(Qt.ItemIsEnabled) |
|
230 |
self.setItem(2, 1, item3) |
|
231 | ||
232 | ||
233 |
rotationCountSpinBox = self.cellWidget(3, 1) |
|
234 |
rotationCountSpinBox.setValue(0) |
|
235 | ||
236 |
isContainChildCheckBox = self.cellWidget(4, 1) |
|
237 |
isContainChildCheckBox.setChecked(False) |
|
238 | ||
239 |
symbolTypeComboBox = self.cellWidget(5, 1) |
|
240 |
symbolTypeComboBox.setCurrentIndex(0) |
|
241 | ||
242 |
baseSymbolComboBox = self.cellWidget(6, 1) |
|
243 |
baseSymbolComboBox.setCurrentIndex(0) |
|
244 | ||
245 |
additionalSymbolItem = QTableWidgetItem("") |
|
246 |
additionalSymbolItem.setFlags(Qt.ItemIsEnabled) |
|
247 |
self.setItem(7, 1, additionalSymbolItem) |
|
248 | ||
249 |
originalPointItem = QTableWidgetItem("") |
|
250 |
originalPointItem.setFlags(Qt.ItemIsEnabled) |
|
251 |
self.setItem(8, 1, originalPointItem) |
|
252 | ||
253 |
connectionPointItem = QTableWidgetItem("") |
|
254 |
connectionPointItem.setFlags(Qt.ItemIsEnabled) |
|
255 |
self.setItem(9, 1, connectionPointItem) |
|
256 |
|
|
257 |
isExceptDetectCheckBox = self.cellWidget(10, 1) |
|
258 |
isExceptDetectCheckBox.setChecked(False) |
|
259 | ||
260 |
hasInstrumentLabelCheckBox = self.cellWidget(11, 1) |
|
261 |
hasInstrumentLabelCheckBox.setChecked(False) |
DTI_PID/DTI_PID/SymbolTreeWidget.py | ||
---|---|---|
8 | 8 |
from PyQt4.QtGui import * |
9 | 9 |
except ImportError: |
10 | 10 |
raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.") |
11 |
from AppDocData import AppDocData
|
|
11 |
from AppDocData import *
|
|
12 | 12 |
import os |
13 | 13 |
import sys |
14 | 14 |
import SymbolBase |
... | ... | |
35 | 35 |
@brief Show Context Menu |
36 | 36 |
@author Jeongwoo |
37 | 37 |
@date 18.04.?? |
38 |
@history 18.04.23 Jeongwoo Symbol object Null Check when show context menu |
|
38 |
@history Jeongwoo 2018.04.23 Symbol object Null Check when show context menu |
|
39 |
humkyung 2018.08.14 add menu for symbol type |
|
39 | 40 |
''' |
40 | 41 |
def openContextMenu(self, position): |
41 | 42 |
indexes = self.selectedIndexes() |
42 | 43 |
itemPosition = self.mapTo(self, position) |
43 | 44 |
item = self.itemAt(itemPosition) |
44 |
sym = self.getSymbolByItemName(item, 0) |
|
45 |
text = item.text(0) |
|
46 |
if len(indexes) > 0: |
|
47 |
level = 0 |
|
48 |
index = indexes[0] |
|
49 |
while index.parent().isValid(): |
|
50 |
index = index.parent() |
|
51 |
level += 1 |
|
52 |
if sym is not None: |
|
45 |
data = item.data(0, self.TREE_DATA_ROLE) |
|
46 |
if data is not None: |
|
47 |
sym = self.getSymbolByItemName(item, 0) |
|
48 |
text = item.text(0) |
|
49 |
if len(indexes) > 0: |
|
50 |
level = 0 |
|
51 |
index = indexes[0] |
|
52 |
while index.parent().isValid(): |
|
53 |
index = index.parent() |
|
54 |
level += 1 |
|
55 |
if sym is not None: |
|
56 |
menu = QMenu() |
|
57 |
editSymbolAction = QAction(self.tr("Edit Symbol")) |
|
58 |
editSymbolAction.triggered.connect(lambda: self.editSymbolActionClickEvent(item, 0)) |
|
59 |
menu.addAction(editSymbolAction) |
|
60 |
displaySymbolAction = QAction(self.tr("Display Symbol")) |
|
61 |
displaySymbolAction.triggered.connect(lambda: self.displaySymbolActionClickEvent(sym.getType(), text)) |
|
62 |
menu.addAction(displaySymbolAction) |
|
63 |
deleteSymbolAction = QAction(self.tr("Delete Symbol")) |
|
64 |
deleteSymbolAction.triggered.connect(lambda: self.deleteSymbolActionClickEvent(sym.getType(), text)) |
|
65 |
menu.addAction(deleteSymbolAction) |
|
66 |
menu.exec_(self.viewport().mapToGlobal(position)) |
|
67 |
else: |
|
53 | 68 |
menu = QMenu() |
54 |
editSymbolAction = QAction(self.tr("Edit Symbol")) |
|
55 |
editSymbolAction.triggered.connect(lambda: self.editSymbolActionClickEvent(item, 0)) |
|
56 |
menu.addAction(editSymbolAction) |
|
57 |
displaySymbolAction = QAction(self.tr("Display Symbol")) |
|
58 |
displaySymbolAction.triggered.connect(lambda: self.displaySymbolActionClickEvent(sym.getType(), text)) |
|
59 |
menu.addAction(displaySymbolAction) |
|
60 |
deleteSymbolAction = QAction(self.tr("Delete Symbol")) |
|
61 |
deleteSymbolAction.triggered.connect(lambda: self.deleteSymbolActionClickEvent(sym.getType(), text)) |
|
62 |
menu.addAction(deleteSymbolAction) |
|
69 |
editAttrAction = QAction(self.tr("속성 편집")) |
|
70 |
editAttrAction.triggered.connect(lambda: self.onEditAttrClicked(item, 0)) |
|
71 |
menu.addAction(editAttrAction) |
|
63 | 72 |
menu.exec_(self.viewport().mapToGlobal(position)) |
64 | 73 | |
65 | 74 |
def editSymbolActionClickEvent(self, item, columNo): |
66 | 75 |
self.showSymbolEditorDialog(item, columNo) |
67 | 76 | |
77 |
''' |
|
78 |
@brief popup attribute editor dialog |
|
79 |
@author humkyung |
|
80 |
@date 2018.08.13 |
|
81 |
''' |
|
82 |
def onEditAttrClicked(self, item, columnNo): |
|
83 |
from AttrEditorDialog import QAttrEditorDialog |
|
84 | ||
85 |
try: |
|
86 |
dlg = QAttrEditorDialog(self) |
|
87 |
dlg.exec_() |
|
88 |
except Exception as ex: |
|
89 |
from App import App |
|
90 | ||
91 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
|
92 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
|
93 | ||
68 | 94 |
def displaySymbolActionClickEvent(self, itemType, itemName): |
69 | 95 |
project = AppDocData.instance().getCurrentProject() |
70 | 96 |
image = QImage(os.path.join(project.getImageFilePath(), itemType, itemName, "PNG")) #itemName includes ".png" |
DTI_PID/DTI_PID/UI/AttrEditor.ui | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<ui version="4.0"> |
|
3 |
<class>AttrEditorDialog</class> |
|
4 |
<widget class="QDialog" name="AttrEditorDialog"> |
|
5 |
<property name="geometry"> |
|
6 |
<rect> |
|
7 |
<x>0</x> |
|
8 |
<y>0</y> |
|
9 |
<width>769</width> |
|
10 |
<height>300</height> |
|
11 |
</rect> |
|
12 |
</property> |
|
13 |
<property name="font"> |
|
14 |
<font> |
|
15 |
<family>맑은 고딕</family> |
|
16 |
<weight>75</weight> |
|
17 |
<bold>true</bold> |
|
18 |
</font> |
|
19 |
</property> |
|
20 |
<property name="windowTitle"> |
|
21 |
<string>속성 편집</string> |
|
22 |
</property> |
|
23 |
<layout class="QGridLayout" name="gridLayout"> |
|
24 |
<item row="0" column="0"> |
|
25 |
<widget class="QGroupBox" name="groupBox"> |
|
26 |
<property name="title"> |
|
27 |
<string>속성</string> |
|
28 |
</property> |
|
29 |
<layout class="QGridLayout" name="gridLayout_2"> |
|
30 |
<item row="0" column="0"> |
|
31 |
<layout class="QVBoxLayout" name="verticalLayout"> |
|
32 |
<item> |
|
33 |
<layout class="QHBoxLayout" name="horizontalLayout"> |
|
34 |
<item> |
|
35 |
<widget class="QLabel" name="labelSelectedSymbolType"> |
|
36 |
<property name="text"> |
|
37 |
<string>Selected Symbol Type</string> |
|
38 |
</property> |
|
39 |
</widget> |
|
40 |
</item> |
|
41 |
<item> |
|
42 |
<spacer name="horizontalSpacer"> |
|
43 |
<property name="orientation"> |
|
44 |
<enum>Qt::Horizontal</enum> |
|
45 |
</property> |
|
46 |
<property name="sizeHint" stdset="0"> |
|
47 |
<size> |
|
48 |
<width>40</width> |
|
49 |
<height>20</height> |
|
50 |
</size> |
|
51 |
</property> |
|
52 |
</spacer> |
|
53 |
</item> |
|
54 |
<item alignment="Qt::AlignRight"> |
|
55 |
<widget class="QPushButton" name="pushButtonAddAttr"> |
|
56 |
<property name="maximumSize"> |
|
57 |
<size> |
|
58 |
<width>24</width> |
|
59 |
<height>16777215</height> |
|
60 |
</size> |
|
61 |
</property> |
|
62 |
<property name="text"> |
|
63 |
<string>+</string> |
|
64 |
</property> |
|
65 |
</widget> |
|
66 |
</item> |
|
67 |
<item alignment="Qt::AlignRight"> |
|
68 |
<widget class="QPushButton" name="pushButtonDelAttr"> |
|
69 |
<property name="maximumSize"> |
|
70 |
<size> |
|
71 |
<width>24</width> |
|
72 |
<height>16777215</height> |
|
73 |
</size> |
|
74 |
</property> |
|
75 |
<property name="text"> |
|
76 |
<string>-</string> |
|
77 |
</property> |
|
78 |
</widget> |
|
79 |
</item> |
|
80 |
</layout> |
|
81 |
</item> |
|
82 |
<item> |
|
83 |
<layout class="QHBoxLayout" name="horizontalLayout_2"> |
|
84 |
<item> |
|
85 |
<widget class="QTableWidget" name="tableWidgetAttr"> |
|
86 |
<property name="columnCount"> |
|
87 |
<number>2</number> |
|
88 |
</property> |
|
89 |
<attribute name="verticalHeaderVisible"> |
|
90 |
<bool>false</bool> |
|
91 |
</attribute> |
|
92 |
<column/> |
|
93 |
<column/> |
|
94 |
</widget> |
|
95 |
</item> |
|
96 |
</layout> |
|
97 |
</item> |
|
98 |
</layout> |
|
99 |
</item> |
|
100 |
</layout> |
|
101 |
</widget> |
|
102 |
</item> |
|
103 |
<item row="1" column="0"> |
|
104 |
<widget class="QDialogButtonBox" name="buttonBox"> |
|
105 |
<property name="orientation"> |
|
106 |
<enum>Qt::Horizontal</enum> |
|
107 |
</property> |
|
108 |
<property name="standardButtons"> |
|
109 |
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
|
110 |
</property> |
|
111 |
</widget> |
|
112 |
</item> |
|
113 |
</layout> |
|
114 |
</widget> |
|
115 |
<resources/> |
|
116 |
<connections> |
|
117 |
<connection> |
|
118 |
<sender>buttonBox</sender> |
|
119 |
<signal>accepted()</signal> |
|
120 |
<receiver>AttrEditorDialog</receiver> |
|
121 |
<slot>accept()</slot> |
|
122 |
<hints> |
|
123 |
<hint type="sourcelabel"> |
|
124 |
<x>248</x> |
|
125 |
<y>254</y> |
|
126 |
</hint> |
|
127 |
<hint type="destinationlabel"> |
|
128 |
<x>157</x> |
|
129 |
<y>274</y> |
|
130 |
</hint> |
|
131 |
</hints> |
|
132 |
</connection> |
|
133 |
<connection> |
|
134 |
<sender>buttonBox</sender> |
|
135 |
<signal>rejected()</signal> |
|
136 |
<receiver>AttrEditorDialog</receiver> |
|
137 |
<slot>reject()</slot> |
|
138 |
<hints> |
|
139 |
<hint type="sourcelabel"> |
|
140 |
<x>316</x> |
|
141 |
<y>260</y> |
|
142 |
</hint> |
|
143 |
<hint type="destinationlabel"> |
|
144 |
<x>286</x> |
|
145 |
<y>274</y> |
|
146 |
</hint> |
|
147 |
</hints> |
|
148 |
</connection> |
|
149 |
</connections> |
|
150 |
</ui> |
내보내기 Unified diff