Skip to content

Commit fe89e13

Browse files
Automatically enable and disable read_only or enabled mode when editing contents of certain widgets programmatically
Fixes #33
1 parent 707ff5d commit fe89e13

File tree

9 files changed

+85
-4
lines changed

9 files changed

+85
-4
lines changed

TkZero/Combobox.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def __init__(
6969
self._style_root = "TCombobox"
7070
self._enabled = True
7171
self._readonly = False
72+
self.enable_automatically = True
7273
if on_aqua(self):
7374
self.bind("<2>", lambda event: self._popup(event=event))
7475
self.bind("<Control-1>", lambda event: self._popup(event=event))
@@ -102,8 +103,13 @@ def value(self, new_text: str) -> None:
102103
raise TypeError(
103104
f"new_text is not a str! " f"(type passed in: {repr(type(new_text))})"
104105
)
106+
last_states = self.state()
107+
if self.enable_automatically:
108+
self.enabled = True
105109
self.delete(0, tk.END)
106110
self.insert(0, new_text)
111+
if self.enable_automatically:
112+
self.state(last_states)
107113

108114
@property
109115
def values(self) -> tuple[str, ...]:

TkZero/Entry.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def __init__(
6464
self._style_root = "TEntry"
6565
self._enabled = True
6666
self._readonly = False
67+
self.enable_automatically = True
6768
if on_aqua(self):
6869
self.bind("<2>", lambda event: self._popup(event=event))
6970
self.bind("<Control-1>", lambda event: self._popup(event=event))
@@ -95,8 +96,13 @@ def value(self, new_text: str) -> None:
9596
raise TypeError(
9697
f"new_text is not a str! " f"(type passed in: {repr(type(new_text))})"
9798
)
99+
last_states = self.state()
100+
if self.enable_automatically:
101+
self.enabled = True
98102
self.delete(0, tk.END)
99103
self.insert(0, new_text)
104+
if self.enable_automatically:
105+
self.state(last_states)
100106

101107
@property
102108
def enabled(self) -> bool:

TkZero/Spinbox.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def __init__(
6767
self._style_root = "TSpinbox"
6868
self._enabled = True
6969
self._readonly = False
70+
self.enable_automatically = True
7071
if on_aqua(self):
7172
self.bind("<2>", lambda event: self._popup(event=event))
7273
self.bind("<Control-1>", lambda event: self._popup(event=event))
@@ -100,8 +101,13 @@ def value(self, new_text: str) -> None:
100101
raise TypeError(
101102
f"new_text is not a str! " f"(type passed in: {repr(type(new_text))})"
102103
)
104+
last_states = self.state()
105+
if self.enable_automatically:
106+
self.enabled = True
103107
self.delete(0, tk.END)
104108
self.insert(0, new_text)
109+
if self.enable_automatically:
110+
self.state(last_states)
105111

106112
@property
107113
def values(self) -> tuple[str, ...]:

TkZero/Text.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def __init__(
6868
)
6969
self._enabled = True
7070
self._readonly = False
71+
self.enable_automatically = True
7172
if on_aqua(self):
7273
self.bind("<2>", lambda event: self._popup(event=event))
7374
self.bind("<Control-1>", lambda event: self._popup(event=event))
@@ -115,8 +116,16 @@ def text(self, new_text: str) -> None:
115116
raise TypeError(
116117
f"new_text is not a str! " f"(type passed in: {repr(type(new_text))})"
117118
)
119+
last_state = "read_only" if self._readonly else self["state"]
120+
if self.enable_automatically:
121+
self.enabled = True
118122
self.delete("1.0", tk.END)
119123
self.insert("1.0", new_text)
124+
if self.enable_automatically:
125+
if last_state == "read_only":
126+
self.read_only = True
127+
else:
128+
self.configure(state=last_state)
120129

121130
@property
122131
def cursor(self) -> str:

docs/Combobox.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ <h1 class="title">Module <code>TkZero.Combobox</code></h1>
9898
self._style_root = &#34;TCombobox&#34;
9999
self._enabled = True
100100
self._readonly = False
101+
self.enable_automatically = True
101102
if on_aqua(self):
102103
self.bind(&#34;&lt;2&gt;&#34;, lambda event: self._popup(event=event))
103104
self.bind(&#34;&lt;Control-1&gt;&#34;, lambda event: self._popup(event=event))
@@ -131,8 +132,13 @@ <h1 class="title">Module <code>TkZero.Combobox</code></h1>
131132
raise TypeError(
132133
f&#34;new_text is not a str! &#34; f&#34;(type passed in: {repr(type(new_text))})&#34;
133134
)
135+
last_states = self.state()
136+
if self.enable_automatically:
137+
self.enabled = True
134138
self.delete(0, tk.END)
135139
self.insert(0, new_text)
140+
if self.enable_automatically:
141+
self.state(last_states)
136142

137143
@property
138144
def values(self) -&gt; tuple[str, ...]:
@@ -476,6 +482,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
476482
self._style_root = &#34;TCombobox&#34;
477483
self._enabled = True
478484
self._readonly = False
485+
self.enable_automatically = True
479486
if on_aqua(self):
480487
self.bind(&#34;&lt;2&gt;&#34;, lambda event: self._popup(event=event))
481488
self.bind(&#34;&lt;Control-1&gt;&#34;, lambda event: self._popup(event=event))
@@ -509,8 +516,13 @@ <h2 class="section-title" id="header-classes">Classes</h2>
509516
raise TypeError(
510517
f&#34;new_text is not a str! &#34; f&#34;(type passed in: {repr(type(new_text))})&#34;
511518
)
519+
last_states = self.state()
520+
if self.enable_automatically:
521+
self.enabled = True
512522
self.delete(0, tk.END)
513523
self.insert(0, new_text)
524+
if self.enable_automatically:
525+
self.state(last_states)
514526

515527
@property
516528
def values(self) -&gt; tuple[str, ...]:

docs/Entry.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ <h1 class="title">Module <code>TkZero.Entry</code></h1>
9393
self._style_root = &#34;TEntry&#34;
9494
self._enabled = True
9595
self._readonly = False
96+
self.enable_automatically = True
9697
if on_aqua(self):
9798
self.bind(&#34;&lt;2&gt;&#34;, lambda event: self._popup(event=event))
9899
self.bind(&#34;&lt;Control-1&gt;&#34;, lambda event: self._popup(event=event))
@@ -124,8 +125,13 @@ <h1 class="title">Module <code>TkZero.Entry</code></h1>
124125
raise TypeError(
125126
f&#34;new_text is not a str! &#34; f&#34;(type passed in: {repr(type(new_text))})&#34;
126127
)
128+
last_states = self.state()
129+
if self.enable_automatically:
130+
self.enabled = True
127131
self.delete(0, tk.END)
128132
self.insert(0, new_text)
133+
if self.enable_automatically:
134+
self.state(last_states)
129135

130136
@property
131137
def enabled(self) -&gt; bool:
@@ -438,6 +444,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
438444
self._style_root = &#34;TEntry&#34;
439445
self._enabled = True
440446
self._readonly = False
447+
self.enable_automatically = True
441448
if on_aqua(self):
442449
self.bind(&#34;&lt;2&gt;&#34;, lambda event: self._popup(event=event))
443450
self.bind(&#34;&lt;Control-1&gt;&#34;, lambda event: self._popup(event=event))
@@ -469,8 +476,13 @@ <h2 class="section-title" id="header-classes">Classes</h2>
469476
raise TypeError(
470477
f&#34;new_text is not a str! &#34; f&#34;(type passed in: {repr(type(new_text))})&#34;
471478
)
479+
last_states = self.state()
480+
if self.enable_automatically:
481+
self.enabled = True
472482
self.delete(0, tk.END)
473483
self.insert(0, new_text)
484+
if self.enable_automatically:
485+
self.state(last_states)
474486

475487
@property
476488
def enabled(self) -&gt; bool:

docs/Frame.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,8 @@ <h1 class="title">Module <code>TkZero.Frame</code></h1>
264264
&#34;&lt;KeyRelease-Shift_R&gt;&#34;, lambda _: self._set_shift_pressed(False)
265265
)
266266
self._hovering_over = False
267-
self.frame.bind(&#34;&lt;Enter&gt;&#34;, lambda _: self._set_hover_state(True))
268-
self.frame.bind(&#34;&lt;Leave&gt;&#34;, lambda _: self._set_hover_state(False))
267+
self.frame.bind(&#34;&lt;Enter&gt;&#34;, lambda _: self._set_hover_state(True), add=True)
268+
self.frame.bind(&#34;&lt;Leave&gt;&#34;, lambda _: self._set_hover_state(False), add=True)
269269

270270
def _set_shift_pressed(self, is_pressed: bool) -&gt; None:
271271
&#34;&#34;&#34;
@@ -844,8 +844,8 @@ <h3>Methods</h3>
844844
&#34;&lt;KeyRelease-Shift_R&gt;&#34;, lambda _: self._set_shift_pressed(False)
845845
)
846846
self._hovering_over = False
847-
self.frame.bind(&#34;&lt;Enter&gt;&#34;, lambda _: self._set_hover_state(True))
848-
self.frame.bind(&#34;&lt;Leave&gt;&#34;, lambda _: self._set_hover_state(False))
847+
self.frame.bind(&#34;&lt;Enter&gt;&#34;, lambda _: self._set_hover_state(True), add=True)
848+
self.frame.bind(&#34;&lt;Leave&gt;&#34;, lambda _: self._set_hover_state(False), add=True)
849849

850850
def _set_shift_pressed(self, is_pressed: bool) -&gt; None:
851851
&#34;&#34;&#34;

docs/Spinbox.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ <h1 class="title">Module <code>TkZero.Spinbox</code></h1>
9696
self._style_root = &#34;TSpinbox&#34;
9797
self._enabled = True
9898
self._readonly = False
99+
self.enable_automatically = True
99100
if on_aqua(self):
100101
self.bind(&#34;&lt;2&gt;&#34;, lambda event: self._popup(event=event))
101102
self.bind(&#34;&lt;Control-1&gt;&#34;, lambda event: self._popup(event=event))
@@ -129,8 +130,13 @@ <h1 class="title">Module <code>TkZero.Spinbox</code></h1>
129130
raise TypeError(
130131
f&#34;new_text is not a str! &#34; f&#34;(type passed in: {repr(type(new_text))})&#34;
131132
)
133+
last_states = self.state()
134+
if self.enable_automatically:
135+
self.enabled = True
132136
self.delete(0, tk.END)
133137
self.insert(0, new_text)
138+
if self.enable_automatically:
139+
self.state(last_states)
134140

135141
@property
136142
def values(self) -&gt; tuple[str, ...]:
@@ -473,6 +479,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
473479
self._style_root = &#34;TSpinbox&#34;
474480
self._enabled = True
475481
self._readonly = False
482+
self.enable_automatically = True
476483
if on_aqua(self):
477484
self.bind(&#34;&lt;2&gt;&#34;, lambda event: self._popup(event=event))
478485
self.bind(&#34;&lt;Control-1&gt;&#34;, lambda event: self._popup(event=event))
@@ -506,8 +513,13 @@ <h2 class="section-title" id="header-classes">Classes</h2>
506513
raise TypeError(
507514
f&#34;new_text is not a str! &#34; f&#34;(type passed in: {repr(type(new_text))})&#34;
508515
)
516+
last_states = self.state()
517+
if self.enable_automatically:
518+
self.enabled = True
509519
self.delete(0, tk.END)
510520
self.insert(0, new_text)
521+
if self.enable_automatically:
522+
self.state(last_states)
511523

512524
@property
513525
def values(self) -&gt; tuple[str, ...]:

docs/Text.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ <h1 class="title">Module <code>TkZero.Text</code></h1>
9797
)
9898
self._enabled = True
9999
self._readonly = False
100+
self.enable_automatically = True
100101
if on_aqua(self):
101102
self.bind(&#34;&lt;2&gt;&#34;, lambda event: self._popup(event=event))
102103
self.bind(&#34;&lt;Control-1&gt;&#34;, lambda event: self._popup(event=event))
@@ -144,8 +145,16 @@ <h1 class="title">Module <code>TkZero.Text</code></h1>
144145
raise TypeError(
145146
f&#34;new_text is not a str! &#34; f&#34;(type passed in: {repr(type(new_text))})&#34;
146147
)
148+
last_state = &#34;read_only&#34; if self._readonly else self[&#34;state&#34;]
149+
if self.enable_automatically:
150+
self.enabled = True
147151
self.delete(&#34;1.0&#34;, tk.END)
148152
self.insert(&#34;1.0&#34;, new_text)
153+
if self.enable_automatically:
154+
if last_state == &#34;read_only&#34;:
155+
self.read_only = True
156+
else:
157+
self.configure(state=last_state)
149158

150159
@property
151160
def cursor(self) -&gt; str:
@@ -517,6 +526,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
517526
)
518527
self._enabled = True
519528
self._readonly = False
529+
self.enable_automatically = True
520530
if on_aqua(self):
521531
self.bind(&#34;&lt;2&gt;&#34;, lambda event: self._popup(event=event))
522532
self.bind(&#34;&lt;Control-1&gt;&#34;, lambda event: self._popup(event=event))
@@ -564,8 +574,16 @@ <h2 class="section-title" id="header-classes">Classes</h2>
564574
raise TypeError(
565575
f&#34;new_text is not a str! &#34; f&#34;(type passed in: {repr(type(new_text))})&#34;
566576
)
577+
last_state = &#34;read_only&#34; if self._readonly else self[&#34;state&#34;]
578+
if self.enable_automatically:
579+
self.enabled = True
567580
self.delete(&#34;1.0&#34;, tk.END)
568581
self.insert(&#34;1.0&#34;, new_text)
582+
if self.enable_automatically:
583+
if last_state == &#34;read_only&#34;:
584+
self.read_only = True
585+
else:
586+
self.configure(state=last_state)
569587

570588
@property
571589
def cursor(self) -&gt; str:

0 commit comments

Comments
 (0)