not1mm 25.5.26.1__py3-none-any.whl → 25.6.1__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.
Files changed (50) hide show
  1. not1mm/__main__.py +66 -43
  2. not1mm/data/MASTER.SCP +2636 -2654
  3. not1mm/data/cty.json +1 -1
  4. not1mm/data/new_contest.ui +5 -0
  5. not1mm/lib/database.py +14 -45
  6. not1mm/lib/edit_station.py +5 -5
  7. not1mm/lib/plugin_common.py +21 -0
  8. not1mm/lib/super_check_partial.py +28 -12
  9. not1mm/lib/version.py +1 -1
  10. not1mm/logwindow.py +4 -0
  11. not1mm/plugins/ari_dx.py +11 -11
  12. not1mm/plugins/arrl_160m.py +13 -13
  13. not1mm/plugins/arrl_dx_cw.py +47 -47
  14. not1mm/plugins/arrl_dx_ssb.py +48 -48
  15. not1mm/plugins/canada_day.py +6 -6
  16. not1mm/plugins/cq_160_cw.py +16 -16
  17. not1mm/plugins/cq_160_ssb.py +16 -16
  18. not1mm/plugins/cq_wpx_cw.py +28 -28
  19. not1mm/plugins/cq_wpx_rtty.py +20 -20
  20. not1mm/plugins/cq_wpx_ssb.py +28 -28
  21. not1mm/plugins/cq_ww_cw.py +19 -19
  22. not1mm/plugins/cq_ww_rtty.py +14 -14
  23. not1mm/plugins/cq_ww_ssb.py +18 -18
  24. not1mm/plugins/ea_majistad_cw.py +6 -6
  25. not1mm/plugins/ea_majistad_ssb.py +6 -6
  26. not1mm/plugins/ea_rtty.py +6 -6
  27. not1mm/plugins/es_field_day.py +604 -0
  28. not1mm/plugins/es_open.py +37 -26
  29. not1mm/plugins/helvetia.py +12 -12
  30. not1mm/plugins/iaru_hf.py +3 -3
  31. not1mm/plugins/jidx_cw.py +4 -4
  32. not1mm/plugins/jidx_ph.py +4 -4
  33. not1mm/plugins/lz-dx.py +12 -12
  34. not1mm/plugins/naqp_cw.py +6 -6
  35. not1mm/plugins/naqp_rtty.py +6 -6
  36. not1mm/plugins/naqp_ssb.py +6 -6
  37. not1mm/plugins/phone_weekly_test.py +6 -6
  38. not1mm/plugins/ref_cw.py +8 -8
  39. not1mm/plugins/ref_ssb.py +8 -8
  40. not1mm/plugins/sac_cw.py +9 -9
  41. not1mm/plugins/sac_ssb.py +11 -11
  42. not1mm/plugins/spdx.py +7 -7
  43. not1mm/plugins/ukeidx.py +10 -10
  44. not1mm/statistics.py +1 -0
  45. {not1mm-25.5.26.1.dist-info → not1mm-25.6.1.dist-info}/METADATA +7 -277
  46. {not1mm-25.5.26.1.dist-info → not1mm-25.6.1.dist-info}/RECORD +50 -49
  47. {not1mm-25.5.26.1.dist-info → not1mm-25.6.1.dist-info}/WHEEL +1 -1
  48. {not1mm-25.5.26.1.dist-info → not1mm-25.6.1.dist-info}/entry_points.txt +0 -0
  49. {not1mm-25.5.26.1.dist-info → not1mm-25.6.1.dist-info}/licenses/LICENSE +0 -0
  50. {not1mm-25.5.26.1.dist-info → not1mm-25.6.1.dist-info}/top_level.txt +0 -0
not1mm/plugins/es_open.py CHANGED
@@ -1,8 +1,11 @@
1
1
  """ """
2
2
 
3
- import datetime
4
3
  import logging
5
4
  import platform
5
+ from datetime import datetime
6
+ from datetime import timedelta
7
+ from datetime import timezone
8
+
6
9
 
7
10
  from pathlib import Path
8
11
 
@@ -17,6 +20,7 @@ logger = logging.getLogger(__name__)
17
20
 
18
21
  EXCHANGE_HINT = "#"
19
22
 
23
+
20
24
  name = "ES OPEN"
21
25
  cabrillo_name = "ES-OPEN"
22
26
  mode = "BOTH" # CW SSB BOTH RTTY
@@ -40,79 +44,86 @@ dupe_type = 5
40
44
 
41
45
 
42
46
  def specific_contest_check_dupe(self, call):
47
+ """"""
48
+ # get mode from radio state
49
+ mode = self.radio_state.get("mode", "")
43
50
  """Dupe checking specific to just this contest."""
44
-
45
- # constant to split the contest
46
- contest_length_in_minutes = 60
47
- split_contest_by_minutes = 20
51
+ # constant to split the contest - correct ES Open Contest length is 4 hours
52
+ contest_length_in_minutes = 240
53
+ split_contest_by_minutes = 60
48
54
 
49
55
  period_count = int(contest_length_in_minutes / split_contest_by_minutes)
50
56
 
51
57
  # think about generic solution by splitting the contest to n different periods
52
58
  start_date_init = self.contest_settings.get("StartDate", "")
53
- self.contest_start_date = start_date_init.split(" ")[0]
54
- self.contest_start_time = start_date_init.split(" ")[1]
55
-
56
- start_date_init_date = datetime.datetime.strptime(
57
- start_date_init, "%Y-%m-%d %H:%M:%S"
58
- )
59
+ start_date_init_date = datetime.strptime(start_date_init, "%Y-%m-%d %H:%M:%S")
59
60
 
60
61
  # Create time periods dynamically based on period count
61
62
  time_periods = []
62
63
  for i in range(period_count):
63
64
  minutes_to_add = split_contest_by_minutes * (i + 1)
64
- time_period = start_date_init_date + datetime.timedelta(minutes=minutes_to_add)
65
+ time_period = start_date_init_date + timedelta(minutes=minutes_to_add)
65
66
  time_periods.append(time_period)
66
67
 
67
68
  # Assign to variables for backwards compatibility
68
69
  time_period_1 = time_periods[0] if len(time_periods) > 0 else None
69
70
  time_period_2 = time_periods[1] if len(time_periods) > 1 else None
70
71
  time_period_3 = time_periods[2] if len(time_periods) > 2 else None
72
+ time_period_4 = time_periods[3] if len(time_periods) > 3 else None
71
73
 
72
74
  # get current time in UTC
73
- iso_current_time = datetime.datetime.now(datetime.timezone.utc)
75
+ iso_current_time = datetime.now(timezone.utc)
74
76
  current_time = iso_current_time.replace(tzinfo=None)
75
77
 
76
78
  result = {}
77
79
  result["isdupe"] = False
78
80
 
79
- if current_time < time_period_1:
80
- start_date_init = self.contest_start_date + " " + self.contest_start_time
81
+ if current_time < time_period_1 and current_time >= start_date_init_date:
81
82
 
82
- result = self.database.check_dupe_on_period_1_mode(
83
+ result = self.database.check_dupe_on_period_mode(
83
84
  call,
84
85
  self.contact.get("Band", ""),
85
86
  mode,
86
- start_date_init,
87
+ start_date_init_date,
87
88
  time_period_1.strftime("%Y-%m-%d %H:%M:%S"),
88
89
  )
89
90
 
90
- elif current_time < time_period_2 and current_time >= time_period_1:
91
- start_date_init = self.contest_start_date + " " + self.contest_start_time
91
+ if current_time < time_period_2 and current_time >= time_period_1:
92
92
 
93
- result = self.database.check_dupe_on_period_2_mode(
93
+ result = self.database.check_dupe_on_period_mode(
94
94
  call,
95
95
  self.contact.get("Band", ""),
96
96
  mode,
97
- start_date_init,
98
97
  time_period_1.strftime("%Y-%m-%d %H:%M:%S"),
99
98
  time_period_2.strftime("%Y-%m-%d %H:%M:%S"),
100
99
  )
101
100
 
102
- elif current_time < time_period_3 and current_time >= time_period_2:
103
- start_date_init = self.contest_start_date + " " + self.contest_start_time
101
+ if current_time < time_period_3 and current_time >= time_period_2:
104
102
 
105
- result = self.database.check_dupe_on_period_3_mode(
103
+ result = self.database.check_dupe_on_period_mode(
106
104
  call,
107
105
  self.contact.get("Band", ""),
108
106
  mode,
109
- start_date_init,
110
107
  time_period_2.strftime("%Y-%m-%d %H:%M:%S"),
111
108
  time_period_3.strftime("%Y-%m-%d %H:%M:%S"),
112
109
  )
113
110
 
114
- return result
111
+ if current_time < time_period_4 and current_time >= time_period_3:
112
+
113
+ result = self.database.check_dupe_on_period_mode(
114
+ call,
115
+ self.contact.get("Band", ""),
116
+ mode,
117
+ time_period_3.strftime("%Y-%m-%d %H:%M:%S"),
118
+ time_period_4.strftime("%Y-%m-%d %H:%M:%S"),
119
+ )
120
+ # just for band and mode if outside of time period
121
+ else:
122
+ result = self.database.check_dupe_on_band_mode(
123
+ call, self.contact.get("Band", ""), mode
124
+ )
115
125
 
126
+ return result
116
127
 
117
128
  def init_contest(self):
118
129
  """setup plugin"""
@@ -221,22 +221,22 @@ def points(self):
221
221
  return 0
222
222
 
223
223
  result = self.cty_lookup(self.station.get("Call", ""))
224
- if result:
225
- for item in result.items():
226
- my_continent = item[1].get("continent", "")
224
+ if result is not None:
225
+ item = result.get(next(iter(result)))
226
+ my_continent = item.get("continent", "")
227
227
  result = self.cty_lookup(self.contact.get("Call", ""))
228
- if result:
229
- for item in result.items():
230
- their_country = item[1].get("entity", "")
231
- their_continent = item[1].get("continent", "")
228
+ if result is not None:
229
+ item = result.get(next(iter(result)))
230
+ their_country = item.get("entity", "")
231
+ their_continent = item.get("continent", "")
232
232
 
233
- if their_country == "Switzerland":
234
- return 10
233
+ if their_country == "Switzerland":
234
+ return 10
235
235
 
236
- if my_continent != their_continent:
237
- return 3
236
+ if my_continent != their_continent:
237
+ return 3
238
238
 
239
- return 1
239
+ return 1
240
240
  # Something wrong
241
241
  return 0
242
242
 
not1mm/plugins/iaru_hf.py CHANGED
@@ -130,9 +130,9 @@ def points(self):
130
130
  return 0
131
131
 
132
132
  result = self.cty_lookup(self.station.get("Call", ""))
133
- if result:
134
- for item in result.items():
135
- mycontinent = item[1].get("continent", "")
133
+ if result is not None:
134
+ item = result.get(next(iter(result)))
135
+ mycontinent = item.get("continent", "")
136
136
  our_itu = int(self.station.get("IARUZone", 0))
137
137
 
138
138
  try:
not1mm/plugins/jidx_cw.py CHANGED
@@ -227,10 +227,10 @@ def cabrillo(self, file_encoding):
227
227
  )
228
228
  logger.debug("%s", filename)
229
229
  result = self.cty_lookup(self.station.get("Call", ""))
230
- if result:
231
- for item in result.items():
232
- mycountry = item[1].get("entity", "")
233
- mycontinent = item[1].get("continent", "")
230
+ if result is not None:
231
+ item = result.get(next(iter(result)))
232
+ mycountry = item[1].get("entity", "")
233
+ # mycontinent = item[1].get("continent", "")
234
234
  category = ""
235
235
  band = self.contest_settings.get("BandCategory", "")
236
236
  if self.contest_settings.get("OperatorCategory", "") == "SINGLE-OP":
not1mm/plugins/jidx_ph.py CHANGED
@@ -196,10 +196,10 @@ def cabrillo(self, file_encoding):
196
196
  )
197
197
  logger.debug("%s", filename)
198
198
  result = self.cty_lookup(self.station.get("Call", ""))
199
- if result:
200
- for item in result.items():
201
- mycountry = item[1].get("entity", "")
202
- mycontinent = item[1].get("continent", "")
199
+ if result is not None:
200
+ item = result.get(next(iter(result)))
201
+ mycountry = item.get("entity", "")
202
+ # mycontinent = item.get("continent", "")
203
203
  category = ""
204
204
  band = self.contest_settings.get("BandCategory", "")
205
205
  if self.contest_settings.get("OperatorCategory", "") == "SINGLE-OP":
not1mm/plugins/lz-dx.py CHANGED
@@ -452,22 +452,22 @@ def points(self):
452
452
  return 0
453
453
 
454
454
  result = self.cty_lookup(self.station.get("Call", ""))
455
- if result:
456
- for item in result.items():
457
- my_continent = item[1].get("continent", "")
455
+ if result is not None:
456
+ item = result.get(next(iter(result)))
457
+ my_continent = item.get("continent", "")
458
458
  result = self.cty_lookup(self.contact.get("Call", ""))
459
- if result:
460
- for item in result.items():
461
- their_country = item[1].get("entity", "")
462
- their_continent = item[1].get("continent", "")
459
+ if result is not None:
460
+ item = result.get(next(iter(result)))
461
+ their_country = item[1].get("entity", "")
462
+ their_continent = item[1].get("continent", "")
463
463
 
464
- if their_country == "Bulgaria":
465
- return 10
464
+ if their_country == "Bulgaria":
465
+ return 10
466
466
 
467
- if my_continent != their_continent:
468
- return 3
467
+ if my_continent != their_continent:
468
+ return 3
469
469
 
470
- return 1
470
+ return 1
471
471
  # Something wrong
472
472
  return 0
473
473
 
not1mm/plugins/naqp_cw.py CHANGED
@@ -146,13 +146,13 @@ def points(self):
146
146
  mycontinent = ""
147
147
  hiscontinent = ""
148
148
  result = self.cty_lookup(self.station.get("Call", ""))
149
- if result:
150
- for item in result.items():
151
- mycontinent = item[1].get("continent", "")
149
+ if result is not None:
150
+ item = result.get(next(iter(result)))
151
+ mycontinent = item.get("continent", "")
152
152
  result = self.cty_lookup(self.contact.get("Call", ""))
153
- if result:
154
- for item in result.items():
155
- hiscontinent = item[1].get("continent", "")
153
+ if result is not None:
154
+ item = result.get(next(iter(result)))
155
+ hiscontinent = item.get("continent", "")
156
156
  if mycontinent == "NA" or hiscontinent == "NA":
157
157
  return 1
158
158
  return 0
@@ -147,13 +147,13 @@ def points(self):
147
147
  mycontinent = ""
148
148
  hiscontinent = ""
149
149
  result = self.cty_lookup(self.station.get("Call", ""))
150
- if result:
151
- for item in result.items():
152
- mycontinent = item[1].get("continent", "")
150
+ if result is not None:
151
+ item = result.get(next(iter(result)))
152
+ mycontinent = item.get("continent", "")
153
153
  result = self.cty_lookup(self.contact.get("Call", ""))
154
- if result:
155
- for item in result.items():
156
- hiscontinent = item[1].get("continent", "")
154
+ if result is not None:
155
+ item = result.get(next(iter(result)))
156
+ hiscontinent = item.get("continent", "")
157
157
  if mycontinent == "NA" or hiscontinent == "NA":
158
158
  return 1
159
159
  return 0
@@ -116,13 +116,13 @@ def points(self):
116
116
  mycontinent = ""
117
117
  hiscontinent = ""
118
118
  result = self.cty_lookup(self.station.get("Call", ""))
119
- if result:
120
- for item in result.items():
121
- mycontinent = item[1].get("continent", "")
119
+ if result is not None:
120
+ item = result.get(next(iter(result)))
121
+ mycontinent = item.get("continent", "")
122
122
  result = self.cty_lookup(self.contact.get("Call", ""))
123
- if result:
124
- for item in result.items():
125
- hiscontinent = item[1].get("continent", "")
123
+ if result is not None:
124
+ item = result.get(next(iter(result)))
125
+ hiscontinent = item.get("continent", "")
126
126
  if mycontinent == "NA" or hiscontinent == "NA":
127
127
  return 1
128
128
  return 0
@@ -136,13 +136,13 @@ def points(self):
136
136
  mycontinent = ""
137
137
  hiscontinent = ""
138
138
  result = self.cty_lookup(self.station.get("Call", ""))
139
- if result:
140
- for item in result.items():
141
- mycontinent = item[1].get("continent", "")
139
+ if result is not None:
140
+ item = result.get(next(iter(result)))
141
+ mycontinent = item.get("continent", "")
142
142
  result = self.cty_lookup(self.contact.get("Call", ""))
143
- if result:
144
- for item in result.items():
145
- hiscontinent = item[1].get("continent", "")
143
+ if result is not None:
144
+ item = result.get(next(iter(result)))
145
+ hiscontinent = item.get("continent", "")
146
146
  if mycontinent == "NA" or hiscontinent == "NA":
147
147
  return 1
148
148
  return 0
not1mm/plugins/ref_cw.py CHANGED
@@ -214,15 +214,15 @@ def points(self):
214
214
  their_country = None
215
215
 
216
216
  result = self.cty_lookup(self.station.get("Call", ""))
217
- if result:
218
- for item in result.items():
219
- my_country = item[1].get("entity", "")
220
- my_continent = item[1].get("continent", "")
217
+ if result is not None:
218
+ item = result.get(next(iter(result)))
219
+ my_country = item.get("entity", "")
220
+ my_continent = item.get("continent", "")
221
221
  result = self.cty_lookup(self.contact.get("Call", ""))
222
- if result:
223
- for item in result.items():
224
- their_country = item[1].get("entity", "")
225
- their_continent = item[1].get("continent", "")
222
+ if result is not None:
223
+ item = result.get(next(iter(result)))
224
+ their_country = item.get("entity", "")
225
+ their_continent = item.get("continent", "")
226
226
 
227
227
  if my_country == "France":
228
228
  if their_country == "France":
not1mm/plugins/ref_ssb.py CHANGED
@@ -228,15 +228,15 @@ def points(self):
228
228
  their_country = None
229
229
 
230
230
  result = self.cty_lookup(self.station.get("Call", ""))
231
- if result:
232
- for item in result.items():
233
- my_country = item[1].get("entity", "")
234
- my_continent = item[1].get("continent", "")
231
+ if result is not None:
232
+ item = result.get(next(iter(result)))
233
+ my_country = item.get("entity", "")
234
+ my_continent = item.get("continent", "")
235
235
  result = self.cty_lookup(self.contact.get("Call", ""))
236
- if result:
237
- for item in result.items():
238
- their_country = item[1].get("entity", "")
239
- their_continent = item[1].get("continent", "")
236
+ if result is not None:
237
+ item = result.get(next(iter(result)))
238
+ their_country = item.get("entity", "")
239
+ their_continent = item.get("continent", "")
240
240
 
241
241
  if my_country == "France":
242
242
  if their_country == "France":
not1mm/plugins/sac_cw.py CHANGED
@@ -175,15 +175,15 @@ def points(self):
175
175
 
176
176
  result = self.cty_lookup(self.station.get("Call", ""))
177
177
  if result:
178
- for item in result.items():
179
- myprimary_pfx = item[1].get("primary_pfx", "")
180
- mycontinent = item[1].get("continent", "")
178
+ item = result.get(next(iter(result)))
179
+ myprimary_pfx = item.get("primary_pfx", "")
180
+ mycontinent = item.get("continent", "")
181
181
 
182
182
  result = self.cty_lookup(self.contact.get("Call", ""))
183
183
  if result:
184
- for item in result.items():
185
- hisprimary_pfx = item[1].get("primary_pfx", "")
186
- hiscontinent = item[1].get("continent", "")
184
+ item = result.get(next(iter(result)))
185
+ hisprimary_pfx = item.get("primary_pfx", "")
186
+ hiscontinent = item.get("continent", "")
187
187
 
188
188
  if (
189
189
  myprimary_pfx in scandinavian_prefixes
@@ -213,9 +213,9 @@ def show_mults(self):
213
213
  mult_count = 0
214
214
 
215
215
  result = self.cty_lookup(self.station.get("Call", ""))
216
- if result:
217
- for item in result.items():
218
- myprimary_pfx = item[1].get("primary_pfx", "")
216
+ if result is not None:
217
+ item = result.get(next(iter(result)))
218
+ myprimary_pfx = item.get("primary_pfx", "")
219
219
 
220
220
  if myprimary_pfx in scandinavian_prefixes:
221
221
  result = self.database.fetch_country_band_count()
not1mm/plugins/sac_ssb.py CHANGED
@@ -174,16 +174,16 @@ def points(self):
174
174
  hiscontinent = ""
175
175
 
176
176
  result = self.cty_lookup(self.station.get("Call", ""))
177
- if result:
178
- for item in result.items():
179
- myprimary_pfx = item[1].get("primary_pfx", "")
180
- mycontinent = item[1].get("continent", "")
177
+ if result is not None:
178
+ item = result.get(next(iter(result)))
179
+ myprimary_pfx = item.get("primary_pfx", "")
180
+ mycontinent = item.get("continent", "")
181
181
 
182
182
  result = self.cty_lookup(self.contact.get("Call", ""))
183
- if result:
184
- for item in result.items():
185
- hisprimary_pfx = item[1].get("primary_pfx", "")
186
- hiscontinent = item[1].get("continent", "")
183
+ if result is not None:
184
+ item = result.get(next(iter(result)))
185
+ hisprimary_pfx = item.get("primary_pfx", "")
186
+ hiscontinent = item.get("continent", "")
187
187
 
188
188
  if (
189
189
  myprimary_pfx in scandinavian_prefixes
@@ -213,9 +213,9 @@ def show_mults(self):
213
213
  mult_count = 0
214
214
 
215
215
  result = self.cty_lookup(self.station.get("Call", ""))
216
- if result:
217
- for item in result.items():
218
- myprimary_pfx = item[1].get("primary_pfx", "")
216
+ if result is not None:
217
+ item = result.get(next(iter(result)))
218
+ myprimary_pfx = item.get("primary_pfx", "")
219
219
 
220
220
  if myprimary_pfx in scandinavian_prefixes:
221
221
  result = self.database.fetch_country_band_count()
not1mm/plugins/spdx.py CHANGED
@@ -131,15 +131,15 @@ def points(self):
131
131
  hiscontinent = ""
132
132
 
133
133
  result = self.cty_lookup(self.station.get("Call", ""))
134
- if result:
135
- for item in result.items():
136
- mycountry = item[1].get("entity", "")
134
+ if result is not None:
135
+ item = result.get(next(iter(result)))
136
+ mycountry = item.get("entity", "")
137
137
 
138
138
  result = self.cty_lookup(self.contact.get("Call", ""))
139
- if result:
140
- for item in result.items():
141
- hiscountry = item[1].get("entity", "")
142
- hiscontinent = item[1].get("continent", "")
139
+ if result is not None:
140
+ item = result.get(next(iter(result)))
141
+ hiscountry = item.get("entity", "")
142
+ hiscontinent = item.get("continent", "")
143
143
 
144
144
  if mycountry == "Poland":
145
145
  if hiscountry == "Poland":
not1mm/plugins/ukeidx.py CHANGED
@@ -153,18 +153,18 @@ def points(self):
153
153
  hiscontinent = ""
154
154
 
155
155
  result = self.cty_lookup(self.station.get("Call", ""))
156
- if result:
157
- for item in result.items():
158
- myprimary_pfx = item[1].get("primary_pfx", "")
159
- # mycountry = item[1].get("entity", "")
160
- mycontinent = item[1].get("continent", "")
156
+ if result is not None:
157
+ item = result.get(next(iter(result)))
158
+ myprimary_pfx = item.get("primary_pfx", "")
159
+ # mycountry = item.get("entity", "")
160
+ mycontinent = item.get("continent", "")
161
161
 
162
162
  result = self.cty_lookup(self.contact.get("Call", ""))
163
- if result:
164
- for item in result.items():
165
- hisprimary_pfx = item[1].get("primary_pfx", "")
166
- # hiscountry = item[1].get("entity", "")
167
- hiscontinent = item[1].get("continent", "")
163
+ if result is not None:
164
+ item = result.get(next(iter(result)))
165
+ hisprimary_pfx = item.get("primary_pfx", "")
166
+ # hiscountry = item.get("entity", "")
167
+ hiscontinent = item.get("continent", "")
168
168
 
169
169
  st = 100
170
170
  et = 459
not1mm/statistics.py CHANGED
@@ -98,6 +98,7 @@ class StatsWindow(QDockWidget):
98
98
  if self.active is False:
99
99
  return
100
100
  self.tableWidget.clear()
101
+ self.tableWidget.setAlternatingRowColors(True)
101
102
  self.tableWidget.setFocusPolicy(Qt.FocusPolicy.NoFocus)
102
103
  self.tableWidget.setColumnCount(7)
103
104
  self.tableWidget.setHorizontalHeaderLabels(