mwxlib 0.99.0__py3-none-any.whl → 0.99.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.

Potentially problematic release.


This version of mwxlib might be problematic. Click here for more details.

mwx/controls.py CHANGED
@@ -26,7 +26,7 @@ class Param:
26
26
  Args:
27
27
  name : label
28
28
  range : range
29
- value : std_value (default is nan)
29
+ value : std_value (default is None)
30
30
  fmt : text formatter or format:str (default is '%g')
31
31
  `hex` specifies hexadecimal format
32
32
  handler : called when control changed
@@ -95,8 +95,8 @@ class Param:
95
95
  def reset(self, v=None, internal_callback=True):
96
96
  """Reset value when indexed (by knobs) with callback."""
97
97
  if v is None:
98
- v = self.std_value # reset to std_value
99
- if np.isnan(v): # do nothing if std_value is nan
98
+ v = self.std_value
99
+ if np.isnan(v):
100
100
  return
101
101
  elif isinstance(v, str):
102
102
  try:
@@ -104,27 +104,7 @@ class Param:
104
104
  except Exception:
105
105
  v = self.value
106
106
  internal_callback = False
107
-
108
- if v is None:
109
- v = nan
110
- if np.isnan(v) or np.isinf(v):
111
- self.__value = v
112
- for knob in self.knobs:
113
- knob.update_ctrl(None, notify=False)
114
- return
115
- if v != self.__value:
116
- ## If the value is out of range, it will be modified.
117
- valid = (self.min <= v <= self.max)
118
- if valid:
119
- self.__value = v
120
- elif v < self.min:
121
- self.__value = self.min
122
- self.callback('underflow', self)
123
- else:
124
- self.__value = self.max
125
- self.callback('overflow', self)
126
- for knob in self.knobs:
127
- knob.update_ctrl(valid, notify=True)
107
+ self.value = v
128
108
  if internal_callback:
129
109
  self.callback('control', self)
130
110
 
@@ -137,8 +117,6 @@ class Param:
137
117
  def check(self, v):
138
118
  self.__check = bool(v)
139
119
  self.callback('check', self)
140
- for knob in self.knobs:
141
- knob.update_label()
142
120
 
143
121
  @property
144
122
  def name(self):
@@ -157,7 +135,30 @@ class Param:
157
135
 
158
136
  @value.setter
159
137
  def value(self, v):
160
- self.reset(v)
138
+ if v is None:
139
+ v = nan
140
+ if np.isnan(v) or np.isinf(v):
141
+ self.__value = v
142
+ for knob in self.knobs:
143
+ knob.update_ctrl(None, notify=False)
144
+ return
145
+ elif v == self.__value:
146
+ for knob in self.knobs:
147
+ knob.update_ctrl(True, notify=False)
148
+ return
149
+
150
+ ## If the value is out of range, it will be modified.
151
+ valid = (self.min <= v <= self.max)
152
+ if valid:
153
+ self.__value = v
154
+ elif v < self.min:
155
+ self.__value = self.min
156
+ self.callback('underflow', self)
157
+ else:
158
+ self.__value = self.max
159
+ self.callback('overflow', self)
160
+ for knob in self.knobs:
161
+ knob.update_ctrl(valid, notify=True)
161
162
 
162
163
  @property
163
164
  def std_value(self):
@@ -326,7 +327,7 @@ class Knob(wx.Panel):
326
327
  self.__par = param
327
328
  self.__par.knobs.append(self) # パラメータの関連付けを行う
328
329
 
329
- if type is None:
330
+ if not type:
330
331
  type = 'slider'
331
332
  if cw < 0:
332
333
  cw = 0
@@ -442,6 +443,7 @@ class Knob(wx.Panel):
442
443
  t = ' ' if np.isnan(v.std_value) or v.value == v.std_value else '*'
443
444
  self.label.SetLabel(v.name + t)
444
445
  self.label.Refresh()
446
+ self.Refresh()
445
447
 
446
448
  def update_ctrl(self, valid=True, notify=False):
447
449
  """Called when value is being changed (internal use only)."""
@@ -478,12 +480,14 @@ class Knob(wx.Panel):
478
480
  j = self.ctrl.GetValue() + bit
479
481
  if j != v.index:
480
482
  v.index = j
483
+ v.reset(v.value)
481
484
 
482
485
  def OnScroll(self, evt): #<wx._core.ScrollEvent><wx._controls.SpinEvent><wx._core.CommandEvent>
483
486
  v = self.__par
484
487
  j = self.ctrl.GetValue()
485
488
  if j != v.index:
486
489
  v.index = j
490
+ v.reset(v.value)
487
491
  evt.Skip()
488
492
 
489
493
  def OnMouseWheel(self, evt): #<wx._core.MouseEvent>
@@ -590,7 +594,6 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
590
594
  for cc in obj.Children: # child of child <wx._core.SizerItem>
591
595
  cc.Show(not cc.IsShown())
592
596
  self.Layout()
593
- self.SendSizeEvent()
594
597
  break
595
598
  evt.Skip()
596
599
 
@@ -618,9 +621,7 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
618
621
  ## child = self.Sizer.Children[groupid]
619
622
  ## child.Show(p)
620
623
  self.Sizer.Show(groupid % len(self.__groups), p)
621
- ## self.Sizer.Fit(self) # do Fit(self.Parent) if needed
622
624
  self.Layout()
623
- self.Parent.SendSizeEvent() # let parent redraw the child panel
624
625
 
625
626
  def is_folded(self, groupid):
626
627
  child = self.Sizer.Children[groupid]
@@ -632,9 +633,7 @@ class KnobCtrlPanel(scrolled.ScrolledPanel):
632
633
  if isinstance(child.Sizer, wx.StaticBoxSizer) and child.IsShown():
633
634
  for cc in child.Sizer.Children: # child of child <wx._core.SizerItem>
634
635
  cc.Show(not p)
635
- ## self.Sizer.Fit(self) # do Fit(self.Parent) if needed
636
636
  self.Layout()
637
- self.Parent.SendSizeEvent() # let parent redraw the child panel
638
637
 
639
638
  def layout(self, items, title=None,
640
639
  row=0, expand=0, border=2, hspacing=1, vspacing=1,
mwx/framework.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #! python3
2
2
  """mwxlib framework.
3
3
  """
4
- __version__ = "0.99.0"
4
+ __version__ = "0.99.1"
5
5
  __author__ = "Kazuya O'moto <komoto@jeol.co.jp>"
6
6
 
7
7
  from contextlib import contextmanager
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mwxlib
3
- Version: 0.99.0
3
+ Version: 0.99.1
4
4
  Summary: A wrapper of matplotlib and wxPython (phoenix)
5
5
  Home-page: https://github.com/komoto48g/mwxlib
6
6
  Author: Kazuya O'moto
@@ -1,7 +1,7 @@
1
1
  mwx/__init__.py,sha256=nN62CGTWjME7Zz2h-jIRB8MxwuErIkHPGrlBzydkF0o,643
2
2
  mwx/bookshelf.py,sha256=so-xSLq08sMlJBErTxOaDoKUAMa_g1CkIP2pNnff68c,5607
3
- mwx/controls.py,sha256=WYd0nbpXL7eiE5E7l7jG49pm_u4mfgHI4c1dop4lsMM,48103
4
- mwx/framework.py,sha256=28_DX0eYwintdgBaO-06ds0NGevwXu_UdYmXjqTy4os,75587
3
+ mwx/controls.py,sha256=IPd2MhiWncKcsNu9m0Pi3WJU61FXUdaup8v9XmgM4Zg,47795
4
+ mwx/framework.py,sha256=UIFTHvaE3gjLg8LMep5_2XWIK-_XGbc6wsJ0jFkfq1Y,75587
5
5
  mwx/graphman.py,sha256=N34F5GXpN3ZEMfUIOswlM-OCIB1KObC6X1NTq_Qc2dk,69973
6
6
  mwx/images.py,sha256=_-Eh3xF7Khu42ivkYp97NXIzSNGbjcidqtWjZQFGtqE,47827
7
7
  mwx/matplot2.py,sha256=xCJ_ZzdDEWmzctpPaOrzTnwXyHINP4nfFHweoTZa6ug,32899
@@ -21,8 +21,8 @@ mwx/plugins/frame_listview.py,sha256=yEYPCdLHLSMTJwTv6iYAh3Lo4lJvYfp5BxTLP3FhW9Y
21
21
  mwx/plugins/line_profile.py,sha256=--9NIc3x5EfRB3L59JvD7rzENQHyiYfu7wWJo6AuMkA,820
22
22
  mwx/py/__init__.py,sha256=xykgfOytOwNuvXsfkLoumFZSTN-iBsHOjczYXngjmUE,12
23
23
  mwx/py/filling.py,sha256=fumUG1F5M9TL-Dfqni4G85uk7TmvnUunTbdcPDV0vfo,16857
24
- mwxlib-0.99.0.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
25
- mwxlib-0.99.0.dist-info/METADATA,sha256=Ix7YJKkft0nZZfhvPm-XOgN65HwIZF3T6asdSvhsCP0,7411
26
- mwxlib-0.99.0.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
27
- mwxlib-0.99.0.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
- mwxlib-0.99.0.dist-info/RECORD,,
24
+ mwxlib-0.99.1.dist-info/LICENSE,sha256=PGtRKCaTkmUDlBQwpptJAxJtdqxIUtAmdBsaT9nUVkA,1091
25
+ mwxlib-0.99.1.dist-info/METADATA,sha256=Hen3Gyc04u6p8FXYzfrB3fwK1h-OFhYVqzlqdMkCsbs,7411
26
+ mwxlib-0.99.1.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
27
+ mwxlib-0.99.1.dist-info/top_level.txt,sha256=SI1Mh118AstnUFGPNq5aMNKiAnVNmZk1S9Ij-OwAEpY,4
28
+ mwxlib-0.99.1.dist-info/RECORD,,