LabelCraft 2.1.5__tar.gz → 2.1.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {labelcraft-2.1.5 → labelcraft-2.1.7}/LabelCraft.egg-info/PKG-INFO +3 -3
- {labelcraft-2.1.5 → labelcraft-2.1.7}/PKG-INFO +3 -3
- {labelcraft-2.1.5 → labelcraft-2.1.7}/README.md +2 -2
- {labelcraft-2.1.5 → labelcraft-2.1.7}/labelcraft_ui.py +27 -3
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/__init__.py +1 -1
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/colorDialog.py +20 -3
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/theme_manager.py +3 -2
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/utils.py +16 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/setup.py +0 -29
- {labelcraft-2.1.5 → labelcraft-2.1.7}/LabelCraft.egg-info/SOURCES.txt +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/LabelCraft.egg-info/dependency_links.txt +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/LabelCraft.egg-info/entry_points.txt +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/LabelCraft.egg-info/not-zip-safe +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/LabelCraft.egg-info/requires.txt +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/LabelCraft.egg-info/top_level.txt +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/MANIFEST.in +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/data/coco_classes.txt +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/data/predefined_classes.txt +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/annotation_converter.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/annotation_importer.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/canvas.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/cli.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/coco_io.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/combobox.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/constants.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/create_ml_io.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/csv_io.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/default_label_combobox.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/hashableQListWidgetItem.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/i18n_engine.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/json_io.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/labelDialog.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/labelFile.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/lightWidget.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/locales/de-DE.json +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/locales/en.json +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/locales/fr-FR.json +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/locales/ja-JP.json +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/locales/zh-CN.json +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/locales/zh-TW.json +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/newProjectDialog.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/pascal_voc_io.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/project.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/resources.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/settings.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/shape.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/toolBar.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/ustr.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/yolo_io.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/libs/zoomWidget.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/main.py +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/app.icns +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/app.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/app.svg +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/app_screen.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/cancel.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/close.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/color.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/color_line.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/copy.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/delete.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/done.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/done.svg +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/edit.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/expert1.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/expert2.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/eye.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/feBlend-icon.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/file.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/fit-width.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/fit-window.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/fit.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/format_createml.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/format_voc.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/format_yolo.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/help.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/labels.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/labels.svg +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/light_brighten.svg +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/light_darken.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/light_darken.svg +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/light_lighten.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/light_reset.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/light_reset.svg +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/new.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/next.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/objects.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/open.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/open.svg +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/prev.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/quit.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/resetall.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/save-as.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/save-as.svg +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/save.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/save.svg +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/undo-cross.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/undo.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/verify.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/zoom-in.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/zoom-out.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources/icons/zoom.png +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/resources.qrc +0 -0
- {labelcraft-2.1.5 → labelcraft-2.1.7}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: LabelCraft
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.7
|
|
4
4
|
Summary: LabelCraft - A modern graphical image annotation tool based on labelImg
|
|
5
5
|
Home-page: https://github.com/syd168/LabelCraft
|
|
6
6
|
Author: LabelCraft Contributors
|
|
@@ -37,12 +37,12 @@ Dynamic: summary
|
|
|
37
37
|
|
|
38
38
|
# LabelCraft - Intelligent Image Annotation Tool
|
|
39
39
|
|
|
40
|
-
> **Version 2.1.
|
|
40
|
+
> **Version 2.1.7** - A modern image annotation tool with project management and cross-platform support, developed based on [labelImg](https://github.com/tzutalin/labelImg)
|
|
41
41
|
|
|
42
42
|
[](LICENSE)
|
|
43
43
|
[](https://www.python.org/)
|
|
44
44
|
[](https://www.qt.io/)
|
|
45
|
-
[](https://github.com/syd168/LabelCraft/releases)
|
|
46
46
|
[](https://pepy.tech/project/labelcraft)
|
|
47
47
|
[](https://pypi.org/project/LabelCraft/)
|
|
48
48
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: LabelCraft
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.7
|
|
4
4
|
Summary: LabelCraft - A modern graphical image annotation tool based on labelImg
|
|
5
5
|
Home-page: https://github.com/syd168/LabelCraft
|
|
6
6
|
Author: LabelCraft Contributors
|
|
@@ -37,12 +37,12 @@ Dynamic: summary
|
|
|
37
37
|
|
|
38
38
|
# LabelCraft - Intelligent Image Annotation Tool
|
|
39
39
|
|
|
40
|
-
> **Version 2.1.
|
|
40
|
+
> **Version 2.1.7** - A modern image annotation tool with project management and cross-platform support, developed based on [labelImg](https://github.com/tzutalin/labelImg)
|
|
41
41
|
|
|
42
42
|
[](LICENSE)
|
|
43
43
|
[](https://www.python.org/)
|
|
44
44
|
[](https://www.qt.io/)
|
|
45
|
-
[](https://github.com/syd168/LabelCraft/releases)
|
|
46
46
|
[](https://pepy.tech/project/labelcraft)
|
|
47
47
|
[](https://pypi.org/project/LabelCraft/)
|
|
48
48
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# LabelCraft - Intelligent Image Annotation Tool
|
|
2
2
|
|
|
3
|
-
> **Version 2.1.
|
|
3
|
+
> **Version 2.1.7** - A modern image annotation tool with project management and cross-platform support, developed based on [labelImg](https://github.com/tzutalin/labelImg)
|
|
4
4
|
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
[](https://www.python.org/)
|
|
7
7
|
[](https://www.qt.io/)
|
|
8
|
-
[](https://github.com/syd168/LabelCraft/releases)
|
|
9
9
|
[](https://pepy.tech/project/labelcraft)
|
|
10
10
|
[](https://pypi.org/project/LabelCraft/)
|
|
11
11
|
|
|
@@ -176,7 +176,10 @@ class MainWindow(QMainWindow, WindowMixin):
|
|
|
176
176
|
# Create dock widget (remove title, will be hidden)
|
|
177
177
|
self.dock = QDockWidget('', self)
|
|
178
178
|
self.dock.setObjectName(self.get_str('labels'))
|
|
179
|
-
|
|
179
|
+
# Use zero-height title bar; a default QWidget reserves space on macOS
|
|
180
|
+
hidden_title_bar = QWidget()
|
|
181
|
+
hidden_title_bar.setFixedHeight(0)
|
|
182
|
+
self.dock.setTitleBarWidget(hidden_title_bar)
|
|
180
183
|
|
|
181
184
|
# Create unified right panel with all sections
|
|
182
185
|
right_panel_layout = QVBoxLayout()
|
|
@@ -261,8 +264,16 @@ class MainWindow(QMainWindow, WindowMixin):
|
|
|
261
264
|
completed_layout.addWidget(self.file_list_widget)
|
|
262
265
|
self.completed_group.setLayout(completed_layout)
|
|
263
266
|
right_panel_layout.addWidget(self.completed_group)
|
|
264
|
-
|
|
265
|
-
|
|
267
|
+
|
|
268
|
+
# Let list sections absorb extra height instead of leaving blank space below
|
|
269
|
+
right_panel_layout.setStretchFactor(self.output_group, 0)
|
|
270
|
+
right_panel_layout.setStretchFactor(self.filter_label_group, 0)
|
|
271
|
+
right_panel_layout.setStretchFactor(self.label_list_group, 1)
|
|
272
|
+
right_panel_layout.setStretchFactor(self.completed_group, 1)
|
|
273
|
+
self.label_list.setSizePolicy(
|
|
274
|
+
QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
|
275
|
+
self.file_list_widget.setSizePolicy(
|
|
276
|
+
QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
|
266
277
|
|
|
267
278
|
label_list_container = QWidget()
|
|
268
279
|
label_list_container.setLayout(right_panel_layout)
|
|
@@ -1049,6 +1060,8 @@ class MainWindow(QMainWindow, WindowMixin):
|
|
|
1049
1060
|
unified_layout = QVBoxLayout()
|
|
1050
1061
|
unified_layout.setContentsMargins(2, 2, 2, 2)
|
|
1051
1062
|
unified_layout.setSpacing(3)
|
|
1063
|
+
# Keep toolbar buttons at the top; macOS vertical toolbars stretch to window height
|
|
1064
|
+
unified_layout.setAlignment(Qt.AlignmentFlag.AlignTop)
|
|
1052
1065
|
|
|
1053
1066
|
# Check if project is loaded and image is available
|
|
1054
1067
|
has_project = self.current_project is not None
|
|
@@ -1108,9 +1121,14 @@ class MainWindow(QMainWindow, WindowMixin):
|
|
|
1108
1121
|
unified_layout.addWidget(zoom_widget_container)
|
|
1109
1122
|
|
|
1110
1123
|
unified_container.setLayout(unified_layout)
|
|
1124
|
+
unified_container.setSizePolicy(
|
|
1125
|
+
QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Maximum)
|
|
1111
1126
|
|
|
1112
1127
|
# Add the unified container to toolbar
|
|
1113
1128
|
self.tools.addWidget(unified_container)
|
|
1129
|
+
if self.os_name == 'Darwin':
|
|
1130
|
+
self.tools.setSizePolicy(
|
|
1131
|
+
QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Maximum)
|
|
1114
1132
|
|
|
1115
1133
|
self.canvas.menus[0].clear()
|
|
1116
1134
|
add_actions(self.canvas.menus[0], menu)
|
|
@@ -5306,6 +5324,12 @@ def get_main_app(argv=None):
|
|
|
5306
5324
|
"""
|
|
5307
5325
|
if not argv:
|
|
5308
5326
|
argv = []
|
|
5327
|
+
argv = filter_platform_argv(argv)
|
|
5328
|
+
|
|
5329
|
+
# Required for proper Qt rendering when launched from macOS .app bundles
|
|
5330
|
+
if platform.system() == 'Darwin':
|
|
5331
|
+
os.environ.setdefault('QT_MAC_WANTS_LAYER', '1')
|
|
5332
|
+
|
|
5309
5333
|
app = QApplication(argv)
|
|
5310
5334
|
app.setApplicationName(__appname__)
|
|
5311
5335
|
app.setWindowIcon(new_icon("app"))
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__version_info__ = ('2', '1', '
|
|
1
|
+
__version_info__ = ('2', '1', '7')
|
|
2
2
|
__version__ = '.'.join(__version_info__)
|
|
@@ -16,9 +16,10 @@ class ColorDialog(QColorDialog):
|
|
|
16
16
|
# The default is set at invocation time, so that it
|
|
17
17
|
# works across dialogs for different elements.
|
|
18
18
|
self.default = None
|
|
19
|
-
self.bb = self.
|
|
20
|
-
self.bb
|
|
21
|
-
|
|
19
|
+
self.bb = self._find_button_box()
|
|
20
|
+
if self.bb is not None:
|
|
21
|
+
self.bb.addButton(BB.RestoreDefaults)
|
|
22
|
+
self.bb.clicked.connect(self.check_restore)
|
|
22
23
|
|
|
23
24
|
# Store parent reference for i18n
|
|
24
25
|
self.parent_window = parent
|
|
@@ -27,6 +28,20 @@ class ColorDialog(QColorDialog):
|
|
|
27
28
|
if parent and hasattr(parent, 'i18n'):
|
|
28
29
|
parent.i18n.language_changed.connect(self.retranslate)
|
|
29
30
|
|
|
31
|
+
def _find_button_box(self):
|
|
32
|
+
"""Locate the button box; layout index differs across platforms."""
|
|
33
|
+
layout = self.layout()
|
|
34
|
+
if layout is None:
|
|
35
|
+
return None
|
|
36
|
+
for i in range(layout.count()):
|
|
37
|
+
item = layout.itemAt(i)
|
|
38
|
+
if item is None:
|
|
39
|
+
continue
|
|
40
|
+
widget = item.widget()
|
|
41
|
+
if isinstance(widget, QDialogButtonBox):
|
|
42
|
+
return widget
|
|
43
|
+
return None
|
|
44
|
+
|
|
30
45
|
def tr(self, key: str, default: str = None, **kwargs):
|
|
31
46
|
"""
|
|
32
47
|
Translate a string - standard i18n method name (Qt convention).
|
|
@@ -57,6 +72,8 @@ class ColorDialog(QColorDialog):
|
|
|
57
72
|
return self.currentColor() if self.exec() else None
|
|
58
73
|
|
|
59
74
|
def check_restore(self, button):
|
|
75
|
+
if self.bb is None:
|
|
76
|
+
return
|
|
60
77
|
# In PySide6/Qt6, buttonRole returns an enum, need to use .value for bitwise operation
|
|
61
78
|
role = self.bb.buttonRole(button)
|
|
62
79
|
role_value = role.value if hasattr(role, 'value') else role
|
|
@@ -195,8 +195,9 @@ def _detect_macos_dark_mode():
|
|
|
195
195
|
text=True,
|
|
196
196
|
timeout=2
|
|
197
197
|
)
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
if result.returncode != 0:
|
|
199
|
+
return False
|
|
200
|
+
return 'dark' in result.stdout.strip().lower()
|
|
200
201
|
except (FileNotFoundError, subprocess.TimeoutExpired, Exception):
|
|
201
202
|
# If the command fails, assume light mode (default on macOS)
|
|
202
203
|
return False
|
|
@@ -9,6 +9,22 @@ from PySide6.QtCore import *
|
|
|
9
9
|
from PySide6.QtWidgets import *
|
|
10
10
|
|
|
11
11
|
|
|
12
|
+
def filter_platform_argv(argv):
|
|
13
|
+
"""
|
|
14
|
+
Remove OS-injected launch arguments that break argparse.
|
|
15
|
+
|
|
16
|
+
macOS Finder/Dock injects -psn_* when launching GUI apps from .app bundles.
|
|
17
|
+
"""
|
|
18
|
+
if not argv:
|
|
19
|
+
return argv
|
|
20
|
+
filtered = [argv[0]]
|
|
21
|
+
for arg in argv[1:]:
|
|
22
|
+
if arg.startswith('-psn_'):
|
|
23
|
+
continue
|
|
24
|
+
filtered.append(arg)
|
|
25
|
+
return filtered
|
|
26
|
+
|
|
27
|
+
|
|
12
28
|
def new_icon(icon):
|
|
13
29
|
return QIcon(':/' + icon)
|
|
14
30
|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
from setuptools import setup, find_packages, Command
|
|
5
|
-
from sys import platform as _platform
|
|
6
5
|
from shutil import rmtree
|
|
7
6
|
import sys
|
|
8
7
|
import os
|
|
@@ -34,33 +33,8 @@ try:
|
|
|
34
33
|
except FileNotFoundError:
|
|
35
34
|
history = ''
|
|
36
35
|
|
|
37
|
-
SET_REQUIRES = []
|
|
38
|
-
if _platform == "darwin":
|
|
39
|
-
SET_REQUIRES.append('py2app')
|
|
40
|
-
|
|
41
36
|
required_packages = find_packages(exclude=['tests', 'build', 'dist'])
|
|
42
37
|
|
|
43
|
-
APP = ['main.py']
|
|
44
|
-
OPTIONS = {
|
|
45
|
-
'argv_emulation': True,
|
|
46
|
-
'iconfile': 'resources/icons/app.icns',
|
|
47
|
-
'packages': [
|
|
48
|
-
'PySide6',
|
|
49
|
-
'lxml',
|
|
50
|
-
'xml',
|
|
51
|
-
'xml.etree',
|
|
52
|
-
'json',
|
|
53
|
-
'csv',
|
|
54
|
-
'io',
|
|
55
|
-
'codecs',
|
|
56
|
-
],
|
|
57
|
-
'excludes': [
|
|
58
|
-
'PySide6.QtNetwork',
|
|
59
|
-
'PySide6.QtWebEngineCore',
|
|
60
|
-
'PySide6.QtWebEngineWidgets',
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
|
|
64
38
|
class UploadCommand(Command):
|
|
65
39
|
"""Support setup.py upload."""
|
|
66
40
|
|
|
@@ -103,7 +77,6 @@ class UploadCommand(Command):
|
|
|
103
77
|
|
|
104
78
|
|
|
105
79
|
setup(
|
|
106
|
-
app=APP if _platform == "darwin" else None,
|
|
107
80
|
name=NAME,
|
|
108
81
|
version=about['__version__'],
|
|
109
82
|
description="LabelCraft - A modern graphical image annotation tool based on labelImg",
|
|
@@ -142,8 +115,6 @@ setup(
|
|
|
142
115
|
'Topic :: Scientific/Engineering :: Artificial Intelligence',
|
|
143
116
|
'Topic :: Multimedia :: Graphics',
|
|
144
117
|
],
|
|
145
|
-
options={'py2app': OPTIONS} if _platform == "darwin" else {},
|
|
146
|
-
setup_requires=SET_REQUIRES,
|
|
147
118
|
# $ setup.py publish support.
|
|
148
119
|
cmdclass={
|
|
149
120
|
'upload': UploadCommand,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|