boris-behav-obs 8.9.16__py3-none-any.whl → 9.7.6__py3-none-any.whl

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.

Potentially problematic release.


This version of boris-behav-obs might be problematic. Click here for more details.

Files changed (129) hide show
  1. boris/__init__.py +1 -1
  2. boris/__main__.py +1 -1
  3. boris/about.py +36 -39
  4. boris/add_modifier.py +122 -109
  5. boris/add_modifier_ui.py +239 -135
  6. boris/advanced_event_filtering.py +81 -45
  7. boris/analysis_plugins/__init__.py +0 -0
  8. boris/analysis_plugins/_latency.py +59 -0
  9. boris/analysis_plugins/irr_cohen_kappa.py +109 -0
  10. boris/analysis_plugins/irr_cohen_kappa_with_modifiers.py +112 -0
  11. boris/analysis_plugins/irr_weighted_cohen_kappa.py +157 -0
  12. boris/analysis_plugins/irr_weighted_cohen_kappa_with_modifiers.py +162 -0
  13. boris/analysis_plugins/list_of_dataframe_columns.py +22 -0
  14. boris/analysis_plugins/number_of_occurences.py +22 -0
  15. boris/analysis_plugins/number_of_occurences_by_independent_variable.py +54 -0
  16. boris/analysis_plugins/time_budget.py +61 -0
  17. boris/behav_coding_map_creator.py +228 -229
  18. boris/behavior_binary_table.py +33 -50
  19. boris/behaviors_coding_map.py +17 -18
  20. boris/boris_cli.py +6 -25
  21. boris/cmd_arguments.py +12 -1
  22. boris/coding_pad.py +42 -49
  23. boris/config.py +161 -77
  24. boris/config_file.py +63 -83
  25. boris/connections.py +112 -57
  26. boris/converters.py +13 -37
  27. boris/converters_ui.py +187 -110
  28. boris/cooccurence.py +250 -0
  29. boris/core.py +2511 -1824
  30. boris/core_qrc.py +15895 -10185
  31. boris/core_ui.py +946 -792
  32. boris/db_functions.py +21 -41
  33. boris/dev.py +134 -0
  34. boris/dialog.py +505 -244
  35. boris/duration_widget.py +15 -20
  36. boris/edit_event.py +84 -28
  37. boris/edit_event_ui.py +214 -78
  38. boris/event_operations.py +517 -415
  39. boris/events_cursor.py +25 -17
  40. boris/events_snapshots.py +36 -82
  41. boris/exclusion_matrix.py +4 -9
  42. boris/export_events.py +213 -583
  43. boris/export_observation.py +98 -611
  44. boris/external_processes.py +156 -97
  45. boris/geometric_measurement.py +652 -287
  46. boris/gui_utilities.py +91 -14
  47. boris/image_overlay.py +9 -9
  48. boris/import_observations.py +190 -98
  49. boris/ipc_mpv.py +325 -0
  50. boris/irr.py +26 -63
  51. boris/latency.py +34 -25
  52. boris/measurement_widget.py +14 -18
  53. boris/media_file.py +52 -84
  54. boris/menu_options.py +17 -6
  55. boris/modifier_coding_map_creator.py +1013 -0
  56. boris/modifiers_coding_map.py +7 -9
  57. boris/mpv.py +1 -0
  58. boris/mpv2.py +732 -705
  59. boris/observation.py +655 -310
  60. boris/observation_operations.py +1036 -404
  61. boris/observation_ui.py +584 -356
  62. boris/observations_list.py +71 -53
  63. boris/otx_parser.py +74 -80
  64. boris/param_panel.py +31 -16
  65. boris/param_panel_ui.py +254 -138
  66. boris/player_dock_widget.py +90 -60
  67. boris/plot_data_module.py +43 -46
  68. boris/plot_events.py +127 -90
  69. boris/plot_events_rt.py +17 -31
  70. boris/plot_spectrogram_rt.py +95 -30
  71. boris/plot_waveform_rt.py +32 -21
  72. boris/plugins.py +431 -0
  73. boris/portion/__init__.py +18 -8
  74. boris/portion/const.py +35 -18
  75. boris/portion/dict.py +5 -5
  76. boris/portion/func.py +2 -2
  77. boris/portion/interval.py +21 -41
  78. boris/portion/io.py +41 -32
  79. boris/preferences.py +306 -83
  80. boris/preferences_ui.py +685 -228
  81. boris/project.py +448 -293
  82. boris/project_functions.py +689 -254
  83. boris/project_import_export.py +213 -222
  84. boris/project_ui.py +674 -438
  85. boris/qrc_boris.py +6 -3
  86. boris/qrc_boris5.py +6 -3
  87. boris/select_modifiers.py +74 -48
  88. boris/select_observations.py +20 -199
  89. boris/select_subj_behav.py +67 -39
  90. boris/state_events.py +53 -37
  91. boris/subjects_pad.py +6 -9
  92. boris/synthetic_time_budget.py +45 -28
  93. boris/time_budget_functions.py +171 -171
  94. boris/time_budget_widget.py +84 -114
  95. boris/transitions.py +41 -47
  96. boris/utilities.py +766 -266
  97. boris/version.py +3 -3
  98. boris/video_equalizer.py +16 -14
  99. boris/video_equalizer_ui.py +199 -130
  100. boris/video_operations.py +125 -28
  101. boris/view_df.py +104 -0
  102. boris/view_df_ui.py +75 -0
  103. boris/write_event.py +538 -0
  104. boris_behav_obs-9.7.6.dist-info/METADATA +139 -0
  105. boris_behav_obs-9.7.6.dist-info/RECORD +109 -0
  106. {boris_behav_obs-8.9.16.dist-info → boris_behav_obs-9.7.6.dist-info}/WHEEL +1 -1
  107. boris_behav_obs-9.7.6.dist-info/entry_points.txt +2 -0
  108. boris/README.TXT +0 -22
  109. boris/add_modifier.ui +0 -323
  110. boris/boris_ui.py +0 -886
  111. boris/converters.ui +0 -289
  112. boris/core.qrc +0 -35
  113. boris/core.ui +0 -1543
  114. boris/edit_event.ui +0 -175
  115. boris/icons/logo_eye.ico +0 -0
  116. boris/map_creator.py +0 -850
  117. boris/observation.ui +0 -773
  118. boris/param_panel.ui +0 -379
  119. boris/preferences.ui +0 -537
  120. boris/project.ui +0 -1069
  121. boris/project_server.py +0 -236
  122. boris/vlc.py +0 -10343
  123. boris/vlc_local.py +0 -90
  124. boris_behav_obs-8.9.16.dist-info/LICENSE.TXT +0 -674
  125. boris_behav_obs-8.9.16.dist-info/METADATA +0 -129
  126. boris_behav_obs-8.9.16.dist-info/RECORD +0 -108
  127. boris_behav_obs-8.9.16.dist-info/entry_points.txt +0 -2
  128. {boris → boris_behav_obs-9.7.6.dist-info/licenses}/LICENSE.TXT +0 -0
  129. {boris_behav_obs-8.9.16.dist-info → boris_behav_obs-9.7.6.dist-info}/top_level.txt +0 -0
boris/duration_widget.py CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  widget to edit duration > 24 h or < 0
4
4
 
5
- https://stackoverflow.com/questions/44380202/creating-a-custom-widget-in-pyqt5
5
+ https://stackoverflow.com/questions/44380202/creating-a-custom-widget-in-PySide6
6
6
  """
7
7
 
8
- import decimal as dec
8
+ from decimal import Decimal as dec
9
9
 
10
- from PyQt5.QtWidgets import (
10
+ from PySide6.QtWidgets import (
11
11
  QWidget,
12
12
  QHBoxLayout,
13
13
  QPushButton,
@@ -20,14 +20,13 @@ from PyQt5.QtWidgets import (
20
20
  QRadioButton,
21
21
  )
22
22
 
23
- from PyQt5.QtCore import pyqtSignal
23
+ from PySide6.QtCore import Signal
24
24
 
25
25
  from . import config as cfg
26
26
 
27
27
 
28
28
  class Widget_hhmmss(QWidget):
29
-
30
- time_changed_signal = pyqtSignal(float)
29
+ time_changed_signal = Signal(float)
31
30
 
32
31
  def __init__(self, parent=None):
33
32
  QWidget.__init__(self, parent=parent)
@@ -44,7 +43,7 @@ class Widget_hhmmss(QWidget):
44
43
  self.hours = QSpinBox()
45
44
  self.hours.setValue(0)
46
45
  self.hours.setMinimum(0)
47
- self.hours.setMaximum(1000)
46
+ self.hours.setMaximum(2**31 - 1)
48
47
  self.hours.valueChanged.connect(self.update_time_value)
49
48
  lay.addWidget(self.hours)
50
49
  lay.addWidget(QLabel(":"))
@@ -84,12 +83,7 @@ class Widget_hhmmss(QWidget):
84
83
  self.update_time_value()
85
84
 
86
85
  def update_time_value(self):
87
- new_time = (
88
- self.hours.value() * 3600
89
- + self.minutes.value() * 60
90
- + self.seconds.value()
91
- + self.milliseconds.value() / 1000
92
- )
86
+ new_time = self.hours.value() * 3600 + self.minutes.value() * 60 + self.seconds.value() + self.milliseconds.value() / 1000
93
87
  if self.sign.text() == "-":
94
88
  new_time = -new_time
95
89
 
@@ -123,8 +117,7 @@ class Widget_hhmmss(QWidget):
123
117
 
124
118
 
125
119
  class Widget_seconds(QWidget):
126
-
127
- time_changed_signal = pyqtSignal(float)
120
+ time_changed_signal = Signal(float)
128
121
 
129
122
  def __init__(self, parent=None):
130
123
  QWidget.__init__(self, parent=parent)
@@ -151,16 +144,16 @@ class Widget_seconds(QWidget):
151
144
 
152
145
  class Duration_widget(QWidget):
153
146
  def __init__(self, time_value=0, parent=None):
154
-
155
147
  super().__init__()
156
148
 
157
- self.time_value = dec.Decimal(time_value).quantize(dec.Decimal(".001"))
149
+ self.time_value = dec(time_value).quantize(dec(".001"))
158
150
 
159
151
  lay = QHBoxLayout(self)
160
152
  lay.setSpacing(0)
161
153
  lay.setContentsMargins(0, 0, 0, 0)
162
154
 
163
155
  self.Stack = QStackedWidget()
156
+
164
157
  self.w1 = Widget_hhmmss()
165
158
  self.w1.time_changed_signal.connect(self.time_changed)
166
159
  self.Stack.addWidget(self.w1)
@@ -171,7 +164,7 @@ class Duration_widget(QWidget):
171
164
 
172
165
  lay.addWidget(self.Stack)
173
166
 
174
- self.format_hhmmss = QRadioButton(cfg.HHMMSS)
167
+ self.format_hhmmss = QRadioButton("HH:MM:SS:MS")
175
168
  self.format_hhmmss.setChecked(True)
176
169
  self.format_hhmmss.clicked.connect(self.set_format_hhmmss)
177
170
  lay.addWidget(self.format_hhmmss)
@@ -192,6 +185,8 @@ class Duration_widget(QWidget):
192
185
  self.time_value = x
193
186
 
194
187
  def set_time(self, new_time):
188
+ if new_time.is_nan():
189
+ return
195
190
 
196
191
  self.w1.sign.setText("-" if new_time < 0 else "+")
197
192
 
@@ -236,8 +231,8 @@ class Duration_widget(QWidget):
236
231
  if time_format in [cfg.S]:
237
232
  self.set_format_s()
238
233
 
239
- def get_time(self) -> dec.Decimal:
234
+ def get_time(self) -> dec:
240
235
  """
241
236
  return time displayed by widget in seconds
242
237
  """
243
- return dec.Decimal(self.time_value).quantize(dec.Decimal(".001"))
238
+ return dec(self.time_value).quantize(dec(".001"))
boris/edit_event.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2023 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -20,9 +20,11 @@ This file is part of BORIS.
20
20
 
21
21
  """
22
22
 
23
- from PyQt5.QtWidgets import (
23
+ from decimal import Decimal as dec
24
+ import logging
25
+
26
+ from PySide6.QtWidgets import (
24
27
  QDialog,
25
- QSpinBox,
26
28
  QHBoxLayout,
27
29
  QLabel,
28
30
  QLineEdit,
@@ -34,7 +36,7 @@ from PyQt5.QtWidgets import (
34
36
  )
35
37
 
36
38
  from . import config as cfg
37
- from . import duration_widget
39
+ from . import dialog
38
40
  from .edit_event_ui import Ui_Form
39
41
 
40
42
 
@@ -42,54 +44,109 @@ class DlgEditEvent(QDialog, Ui_Form):
42
44
  def __init__(
43
45
  self,
44
46
  observation_type: str,
45
- time_value=0,
47
+ time_value: dec = dec("NaN"),
48
+ image_idx=None,
46
49
  current_time=0,
47
- time_format=cfg.S,
48
- show_set_current_time=False,
50
+ time_format: str = cfg.S,
51
+ show_set_current_time: bool = False,
52
+ exif_date_time: dec | None = None,
49
53
  parent=None,
50
54
  ):
51
-
52
55
  super().__init__(parent)
53
56
  self.setupUi(self)
54
57
  self.time_value = time_value
58
+ self.image_idx = image_idx
55
59
  self.observation_type = observation_type
56
60
 
57
61
  self.pb_set_to_current_time.setVisible(show_set_current_time)
58
62
  self.current_time = current_time
63
+ self.exif_date_time = exif_date_time
64
+
65
+ # hide frame index for all observations
66
+ # frame index is determined in base of time
67
+ for w in (
68
+ self.lb_frame_idx,
69
+ self.sb_frame_idx,
70
+ self.cb_set_frame_idx_na,
71
+ ):
72
+ w.setVisible(False)
73
+
74
+ # hide image index
75
+ if observation_type in (cfg.LIVE, cfg.MEDIA):
76
+ # hide image index
77
+ for w in (
78
+ self.cb_set_time_na,
79
+ self.gb_image_index,
80
+ ):
81
+ w.setVisible(False)
59
82
 
60
- self.dsbTime.setVisible(False)
61
- self.teTime.setVisible(False)
83
+ # widget for time
84
+ self.time_widget = dialog.get_time_widget(self.time_value)
62
85
 
63
- if observation_type in (cfg.LIVE, cfg.MEDIA):
64
- self.time_widget = duration_widget.Duration_widget(self.time_value)
65
- if time_format == cfg.S:
66
- self.time_widget.set_format_s()
67
- if time_format == cfg.HHMMSS:
68
- self.time_widget.set_format_hhmmss()
86
+ if time_format == cfg.S:
87
+ self.time_widget.rb_seconds.setChecked(True)
88
+ if time_format == cfg.HHMMSS:
89
+ self.time_widget.rb_time.setChecked(True)
90
+ if not self.time_value.is_nan() and int(self.time_value) > cfg.DATE_CUTOFF:
91
+ self.time_widget.rb_datetime.setChecked(True)
69
92
 
70
- self.horizontalLayout_2.insertWidget(0, self.time_widget)
93
+ self.horizontalLayout_3.insertWidget(0, self.time_widget)
71
94
 
72
95
  if observation_type == cfg.IMAGES:
73
- self.label.setText("Image index")
74
- self.pb_set_to_current_time.setText("Set to current image index")
75
- self.img_idx_widget = QSpinBox()
76
- self.img_idx_widget.setValue(self.time_value)
77
-
78
- self.horizontalLayout_2.insertWidget(0, self.img_idx_widget)
96
+ # hide frame index widgets
97
+ self.pb_set_to_current_time.setVisible(self.exif_date_time is not None)
98
+ self.sb_image_idx.setValue(self.image_idx)
79
99
 
80
100
  self.pb_set_to_current_time.clicked.connect(self.set_to_current_time)
81
- self.pbOK.clicked.connect(self.accept)
101
+ self.pb_set_to_current_image_index.clicked.connect(self.set_to_current_image_index)
102
+
103
+ self.cb_set_time_na.stateChanged.connect(self.time_na)
104
+
105
+ # self.cb_set_frame_idx_na.stateChanged.connect(self.frame_idx_na)
106
+ self.pbOK.clicked.connect(self.close_widget)
82
107
  self.pbCancel.clicked.connect(self.reject)
83
108
 
109
+ def close_widget(self):
110
+ """
111
+ close the widget
112
+ """
113
+ if self.observation_type in (cfg.IMAGES):
114
+ if self.sb_image_idx.value() == 0:
115
+ QMessageBox.warning(self, cfg.programName, "The image index cannot be null")
116
+ return
117
+ self.accept()
118
+
119
+ def set_to_current_image_index(self):
120
+ """
121
+ set image index to current image index
122
+ """
123
+ if self.observation_type in (cfg.IMAGES):
124
+ self.sb_image_idx.setValue(int(self.current_time))
125
+
84
126
  def set_to_current_time(self):
85
127
  """
86
128
  set time to current media time
87
129
  """
130
+
88
131
  if self.observation_type in (cfg.LIVE, cfg.MEDIA):
89
- self.time_widget.set_time(float(self.current_time))
132
+ self.time_widget.set_time(dec(float(self.current_time)))
90
133
 
91
- if self.observation_type in (cfg.IMAGES):
92
- self.img_idx_widget.setValue(int(self.current_time))
134
+ if self.observation_type == cfg.IMAGES:
135
+ if self.exif_date_time is not None:
136
+ self.time_widget.set_time(dec(self.exif_date_time))
137
+
138
+ def time_na(self):
139
+ """
140
+ set/unset time to NA
141
+ """
142
+
143
+ logging.debug("time_na function")
144
+
145
+ self.time_widget.setVisible(not self.cb_set_time_na.isChecked())
146
+ self.time_widget.setEnabled(not self.cb_set_time_na.isChecked())
147
+
148
+ self.pb_set_to_current_time.setVisible(not self.cb_set_time_na.isChecked() and self.exif_date_time is not None)
149
+ self.pb_set_to_current_time.setEnabled(not self.cb_set_time_na.isChecked())
93
150
 
94
151
 
95
152
  class EditSelectedEvents(QDialog):
@@ -142,7 +199,6 @@ class EditSelectedEvents(QDialog):
142
199
  self.setLayout(hbox)
143
200
 
144
201
  def rb_changed(self):
145
-
146
202
  self.newText.setEnabled(not self.rbComment.isChecked())
147
203
  self.commentText.setEnabled(self.rbComment.isChecked())
148
204
 
boris/edit_event_ui.py CHANGED
@@ -1,97 +1,233 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Form implementation generated from reading ui file 'edit_event.ui'
4
- #
5
- # Created by: PyQt5 UI code generator 5.9.2
6
- #
7
- # WARNING! All changes made in this file will be lost!
3
+ ################################################################################
4
+ ## Form generated from reading UI file 'edit_event.ui'
5
+ ##
6
+ ## Created by: Qt User Interface Compiler version 6.9.0
7
+ ##
8
+ ## WARNING! All changes made in this file will be lost when recompiling UI file!
9
+ ################################################################################
8
10
 
9
- from PyQt5 import QtCore, QtGui, QtWidgets
11
+ from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12
+ QMetaObject, QObject, QPoint, QRect,
13
+ QSize, QTime, QUrl, Qt)
14
+ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15
+ QFont, QFontDatabase, QGradient, QIcon,
16
+ QImage, QKeySequence, QLinearGradient, QPainter,
17
+ QPalette, QPixmap, QRadialGradient, QTransform)
18
+ from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QGroupBox,
19
+ QHBoxLayout, QLabel, QPlainTextEdit, QPushButton,
20
+ QSizePolicy, QSpacerItem, QSpinBox, QVBoxLayout,
21
+ QWidget)
10
22
 
11
23
  class Ui_Form(object):
12
24
  def setupUi(self, Form):
13
- Form.setObjectName("Form")
14
- Form.resize(413, 408)
15
- self.verticalLayout_2 = QtWidgets.QVBoxLayout(Form)
16
- self.verticalLayout_2.setObjectName("verticalLayout_2")
17
- self.verticalLayout = QtWidgets.QVBoxLayout()
18
- self.verticalLayout.setObjectName("verticalLayout")
19
- self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
20
- self.horizontalLayout_3.setObjectName("horizontalLayout_3")
21
- self.label = QtWidgets.QLabel(Form)
22
- self.label.setObjectName("label")
23
- self.horizontalLayout_3.addWidget(self.label)
24
- self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
25
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
26
- self.teTime = QtWidgets.QTimeEdit(Form)
27
- self.teTime.setObjectName("teTime")
28
- self.horizontalLayout_2.addWidget(self.teTime)
29
- self.dsbTime = QtWidgets.QDoubleSpinBox(Form)
30
- self.dsbTime.setDecimals(3)
31
- self.dsbTime.setMaximum(9999999.0)
32
- self.dsbTime.setObjectName("dsbTime")
33
- self.horizontalLayout_2.addWidget(self.dsbTime)
34
- self.pb_set_to_current_time = QtWidgets.QPushButton(Form)
35
- self.pb_set_to_current_time.setObjectName("pb_set_to_current_time")
36
- self.horizontalLayout_2.addWidget(self.pb_set_to_current_time)
37
- spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
38
- self.horizontalLayout_2.addItem(spacerItem)
25
+ if not Form.objectName():
26
+ Form.setObjectName(u"Form")
27
+ Form.resize(600, 638)
28
+ self.verticalLayout_3 = QVBoxLayout(Form)
29
+ self.verticalLayout_3.setObjectName(u"verticalLayout_3")
30
+ self.gb_time = QGroupBox(Form)
31
+ self.gb_time.setObjectName(u"gb_time")
32
+ self.verticalLayout = QVBoxLayout(self.gb_time)
33
+ self.verticalLayout.setObjectName(u"verticalLayout")
34
+ self.horizontalLayout_8 = QHBoxLayout()
35
+ self.horizontalLayout_8.setObjectName(u"horizontalLayout_8")
36
+ self.cb_set_time_na = QCheckBox(self.gb_time)
37
+ self.cb_set_time_na.setObjectName(u"cb_set_time_na")
38
+
39
+ self.horizontalLayout_8.addWidget(self.cb_set_time_na)
40
+
41
+ self.horizontalSpacer_7 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
42
+
43
+ self.horizontalLayout_8.addItem(self.horizontalSpacer_7)
44
+
45
+
46
+ self.verticalLayout.addLayout(self.horizontalLayout_8)
47
+
48
+ self.horizontalLayout_3 = QHBoxLayout()
49
+ self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
50
+ self.lb_time = QLabel(self.gb_time)
51
+ self.lb_time.setObjectName(u"lb_time")
52
+
53
+ self.horizontalLayout_3.addWidget(self.lb_time)
54
+
55
+ self.horizontalLayout_2 = QHBoxLayout()
56
+ self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
57
+ self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
58
+
59
+ self.horizontalLayout_2.addItem(self.horizontalSpacer)
60
+
61
+
39
62
  self.horizontalLayout_3.addLayout(self.horizontalLayout_2)
63
+
64
+
40
65
  self.verticalLayout.addLayout(self.horizontalLayout_3)
41
- self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
42
- self.horizontalLayout_4.setObjectName("horizontalLayout_4")
43
- self.lbSubject = QtWidgets.QLabel(Form)
44
- self.lbSubject.setObjectName("lbSubject")
66
+
67
+ self.horizontalLayout_9 = QHBoxLayout()
68
+ self.horizontalLayout_9.setObjectName(u"horizontalLayout_9")
69
+ self.pb_set_to_current_time = QPushButton(self.gb_time)
70
+ self.pb_set_to_current_time.setObjectName(u"pb_set_to_current_time")
71
+
72
+ self.horizontalLayout_9.addWidget(self.pb_set_to_current_time)
73
+
74
+ self.horizontalSpacer_8 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
75
+
76
+ self.horizontalLayout_9.addItem(self.horizontalSpacer_8)
77
+
78
+
79
+ self.verticalLayout.addLayout(self.horizontalLayout_9)
80
+
81
+ self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
82
+
83
+ self.verticalLayout.addItem(self.verticalSpacer)
84
+
85
+
86
+ self.verticalLayout_3.addWidget(self.gb_time)
87
+
88
+ self.gb_image_index = QGroupBox(Form)
89
+ self.gb_image_index.setObjectName(u"gb_image_index")
90
+ self.verticalLayout_2 = QVBoxLayout(self.gb_image_index)
91
+ self.verticalLayout_2.setObjectName(u"verticalLayout_2")
92
+ self.horizontalLayout_7 = QHBoxLayout()
93
+ self.horizontalLayout_7.setObjectName(u"horizontalLayout_7")
94
+ self.sb_image_idx = QSpinBox(self.gb_image_index)
95
+ self.sb_image_idx.setObjectName(u"sb_image_idx")
96
+ self.sb_image_idx.setMaximum(10000000)
97
+
98
+ self.horizontalLayout_7.addWidget(self.sb_image_idx)
99
+
100
+ self.pb_set_to_current_image_index = QPushButton(self.gb_image_index)
101
+ self.pb_set_to_current_image_index.setObjectName(u"pb_set_to_current_image_index")
102
+
103
+ self.horizontalLayout_7.addWidget(self.pb_set_to_current_image_index)
104
+
105
+ self.horizontalSpacer_6 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
106
+
107
+ self.horizontalLayout_7.addItem(self.horizontalSpacer_6)
108
+
109
+
110
+ self.verticalLayout_2.addLayout(self.horizontalLayout_7)
111
+
112
+
113
+ self.verticalLayout_3.addWidget(self.gb_image_index)
114
+
115
+ self.horizontalLayout_4 = QHBoxLayout()
116
+ self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
117
+ self.lbSubject = QLabel(Form)
118
+ self.lbSubject.setObjectName(u"lbSubject")
119
+
45
120
  self.horizontalLayout_4.addWidget(self.lbSubject)
46
- self.cobSubject = QtWidgets.QComboBox(Form)
47
- self.cobSubject.setObjectName("cobSubject")
121
+
122
+ self.cobSubject = QComboBox(Form)
123
+ self.cobSubject.setObjectName(u"cobSubject")
124
+
48
125
  self.horizontalLayout_4.addWidget(self.cobSubject)
49
- spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
50
- self.horizontalLayout_4.addItem(spacerItem1)
51
- self.verticalLayout.addLayout(self.horizontalLayout_4)
52
- self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
53
- self.horizontalLayout_5.setObjectName("horizontalLayout_5")
54
- self.label_2 = QtWidgets.QLabel(Form)
55
- self.label_2.setObjectName("label_2")
126
+
127
+ self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
128
+
129
+ self.horizontalLayout_4.addItem(self.horizontalSpacer_2)
130
+
131
+
132
+ self.verticalLayout_3.addLayout(self.horizontalLayout_4)
133
+
134
+ self.horizontalLayout_5 = QHBoxLayout()
135
+ self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
136
+ self.label_2 = QLabel(Form)
137
+ self.label_2.setObjectName(u"label_2")
138
+
56
139
  self.horizontalLayout_5.addWidget(self.label_2)
57
- self.cobCode = QtWidgets.QComboBox(Form)
58
- self.cobCode.setObjectName("cobCode")
140
+
141
+ self.cobCode = QComboBox(Form)
142
+ self.cobCode.setObjectName(u"cobCode")
143
+
59
144
  self.horizontalLayout_5.addWidget(self.cobCode)
60
- spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
61
- self.horizontalLayout_5.addItem(spacerItem2)
62
- self.verticalLayout.addLayout(self.horizontalLayout_5)
63
- self.label_4 = QtWidgets.QLabel(Form)
64
- self.label_4.setObjectName("label_4")
65
- self.verticalLayout.addWidget(self.label_4)
66
- self.leComment = QtWidgets.QPlainTextEdit(Form)
67
- self.leComment.setObjectName("leComment")
68
- self.verticalLayout.addWidget(self.leComment)
69
- self.horizontalLayout = QtWidgets.QHBoxLayout()
70
- self.horizontalLayout.setObjectName("horizontalLayout")
71
- spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
72
- self.horizontalLayout.addItem(spacerItem3)
73
- self.pbCancel = QtWidgets.QPushButton(Form)
74
- self.pbCancel.setObjectName("pbCancel")
145
+
146
+ self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
147
+
148
+ self.horizontalLayout_5.addItem(self.horizontalSpacer_3)
149
+
150
+
151
+ self.verticalLayout_3.addLayout(self.horizontalLayout_5)
152
+
153
+ self.horizontalLayout_6 = QHBoxLayout()
154
+ self.horizontalLayout_6.setObjectName(u"horizontalLayout_6")
155
+ self.lb_frame_idx = QLabel(Form)
156
+ self.lb_frame_idx.setObjectName(u"lb_frame_idx")
157
+
158
+ self.horizontalLayout_6.addWidget(self.lb_frame_idx)
159
+
160
+ self.sb_frame_idx = QSpinBox(Form)
161
+ self.sb_frame_idx.setObjectName(u"sb_frame_idx")
162
+ self.sb_frame_idx.setMinimum(0)
163
+ self.sb_frame_idx.setMaximum(100000000)
164
+
165
+ self.horizontalLayout_6.addWidget(self.sb_frame_idx)
166
+
167
+ self.cb_set_frame_idx_na = QCheckBox(Form)
168
+ self.cb_set_frame_idx_na.setObjectName(u"cb_set_frame_idx_na")
169
+
170
+ self.horizontalLayout_6.addWidget(self.cb_set_frame_idx_na)
171
+
172
+ self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
173
+
174
+ self.horizontalLayout_6.addItem(self.horizontalSpacer_5)
175
+
176
+
177
+ self.verticalLayout_3.addLayout(self.horizontalLayout_6)
178
+
179
+ self.label_4 = QLabel(Form)
180
+ self.label_4.setObjectName(u"label_4")
181
+
182
+ self.verticalLayout_3.addWidget(self.label_4)
183
+
184
+ self.leComment = QPlainTextEdit(Form)
185
+ self.leComment.setObjectName(u"leComment")
186
+
187
+ self.verticalLayout_3.addWidget(self.leComment)
188
+
189
+ self.horizontalLayout = QHBoxLayout()
190
+ self.horizontalLayout.setObjectName(u"horizontalLayout")
191
+ self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
192
+
193
+ self.horizontalLayout.addItem(self.horizontalSpacer_4)
194
+
195
+ self.pbCancel = QPushButton(Form)
196
+ self.pbCancel.setObjectName(u"pbCancel")
197
+
75
198
  self.horizontalLayout.addWidget(self.pbCancel)
76
- self.pbOK = QtWidgets.QPushButton(Form)
77
- self.pbOK.setDefault(True)
78
- self.pbOK.setObjectName("pbOK")
199
+
200
+ self.pbOK = QPushButton(Form)
201
+ self.pbOK.setObjectName(u"pbOK")
202
+
79
203
  self.horizontalLayout.addWidget(self.pbOK)
80
- self.verticalLayout.addLayout(self.horizontalLayout)
81
- self.verticalLayout_2.addLayout(self.verticalLayout)
204
+
205
+
206
+ self.verticalLayout_3.addLayout(self.horizontalLayout)
207
+
82
208
 
83
209
  self.retranslateUi(Form)
84
- QtCore.QMetaObject.connectSlotsByName(Form)
210
+
211
+ self.pbOK.setDefault(True)
212
+
213
+
214
+ QMetaObject.connectSlotsByName(Form)
215
+ # setupUi
85
216
 
86
217
  def retranslateUi(self, Form):
87
- _translate = QtCore.QCoreApplication.translate
88
- Form.setWindowTitle(_translate("Form", "Edit event"))
89
- self.label.setText(_translate("Form", "Time"))
90
- self.teTime.setDisplayFormat(_translate("Form", "hh:mm:ss.zzz"))
91
- self.pb_set_to_current_time.setText(_translate("Form", "Set to current time"))
92
- self.lbSubject.setText(_translate("Form", "Subject"))
93
- self.label_2.setText(_translate("Form", "Code"))
94
- self.label_4.setText(_translate("Form", "Comment"))
95
- self.pbCancel.setText(_translate("Form", "Cancel"))
96
- self.pbOK.setText(_translate("Form", "OK"))
218
+ Form.setWindowTitle(QCoreApplication.translate("Form", u"Edit event", None))
219
+ self.gb_time.setTitle(QCoreApplication.translate("Form", u"Time", None))
220
+ self.cb_set_time_na.setText(QCoreApplication.translate("Form", u"Set time to NA", None))
221
+ self.lb_time.setText("")
222
+ self.pb_set_to_current_time.setText(QCoreApplication.translate("Form", u"Set to current time", None))
223
+ self.gb_image_index.setTitle(QCoreApplication.translate("Form", u"Image index", None))
224
+ self.pb_set_to_current_image_index.setText(QCoreApplication.translate("Form", u"Set to current image index", None))
225
+ self.lbSubject.setText(QCoreApplication.translate("Form", u"Subject", None))
226
+ self.label_2.setText(QCoreApplication.translate("Form", u"Behavior", None))
227
+ self.lb_frame_idx.setText(QCoreApplication.translate("Form", u"Frame index", None))
228
+ self.cb_set_frame_idx_na.setText(QCoreApplication.translate("Form", u"Set NA", None))
229
+ self.label_4.setText(QCoreApplication.translate("Form", u"Comment", None))
230
+ self.pbCancel.setText(QCoreApplication.translate("Form", u"Cancel", None))
231
+ self.pbOK.setText(QCoreApplication.translate("Form", u"OK", None))
232
+ # retranslateUi
97
233