pyvguicom 1.1.1__py3-none-any.whl → 1.1.2__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 pyvguicom might be problematic. Click here for more details.

@@ -0,0 +1,1024 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
6
+ <meta name="generator" content="pdoc 0.10.0" />
7
+ <title>pgentry API documentation</title>
8
+ <meta name="description" content="" />
9
+ <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
10
+ <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
11
+ <link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
12
+ <style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
13
+ <style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
14
+ <style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
15
+ <script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
16
+ <script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
17
+ </head>
18
+ <body>
19
+ <main>
20
+ <article id="content">
21
+ <header>
22
+ <h1 class="title">Module <code>pgentry</code></h1>
23
+ </header>
24
+ <section id="section-intro">
25
+ <details class="source">
26
+ <summary>
27
+ <span>Expand source code</span>
28
+ </summary>
29
+ <pre><code class="python">#!/usr/bin/env python
30
+
31
+ import sys, traceback, os, time, warnings
32
+
33
+ import gi
34
+ gi.require_version(&#34;Gtk&#34;, &#34;3.0&#34;)
35
+ from gi.repository import Gtk
36
+ from gi.repository import Gdk
37
+ from gi.repository import GObject
38
+ from gi.repository import GLib
39
+
40
+ import pgutils, pggui, pgtextview
41
+
42
+ def wrap(cont):
43
+ fr = Gtk.Frame()
44
+ sc = Gtk.ScrolledWindow()
45
+ sc.set_hexpand(True)
46
+ sc.set_vexpand(True)
47
+ sc.add(cont)
48
+ fr.add(sc)
49
+ return fr, cont
50
+
51
+ class Entryx(Gtk.Entry):
52
+
53
+ def __init__(self, noemit = False):
54
+ super(Entryx).__init__()
55
+ Gtk.Entry.__init__(self)
56
+ self.noemit = noemit # do not emit move next on enter
57
+ self.connect(&#34;key-press-event&#34;, self.key_press_event)
58
+
59
+ def set_noemit(self, flag):
60
+ self.noemit = flag
61
+
62
+ def set_gray(self, flag):
63
+ if flag:
64
+ self.set_editable(False);
65
+ style = self.get_style_context()
66
+ color = style.get_background_color(Gtk.StateFlags.NORMAL)
67
+ color2 = Gdk.RGBA(color.red-.1, color.green-.1, color.blue-.1)
68
+ self.override_background_color(Gtk.StateFlags.NORMAL, color2)
69
+ else:
70
+ self.set_editable(True);
71
+ style = self.get_style_context()
72
+ color = style.get_background_color(Gtk.StateFlags.NORMAL)
73
+ self.override_background_color(Gtk.StateFlags.NORMAL, color)
74
+
75
+ def key_press_event(self, arg1, event):
76
+ #print(&#34;keypress&#34;, event.keyval)
77
+ if event.keyval == Gdk.KEY_Tab or event.keyval == Gdk.KEY_ISO_Left_Tab:
78
+ #print(&#34;tab keypress &#34;, event.keyval, event.state)
79
+ if event.state &amp; Gdk.ModifierType.SHIFT_MASK:
80
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_BACKWARD)
81
+ else:
82
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
83
+ return True
84
+
85
+ if event.keyval == Gdk.KEY_Return:
86
+ if not self.noemit:
87
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
88
+ return True
89
+
90
+ # Expects two tuples of stuff
91
+ # labtext, labname, tip, defval = None:
92
+
93
+ def entryquad(arr, vbox, entry1, entry2):
94
+
95
+ hbox2 = Gtk.HBox(False, 2)
96
+
97
+ lab1a = Gtk.Label(label=&#34; &#34;)
98
+ hbox2.pack_start(lab1a, False, 0, 0)
99
+ lab1 = Gtk.Label.new_with_mnemonic(entry1[0]) ; lab1.set_alignment(1, 0)
100
+ lab1.set_tooltip_text(entry1[2])
101
+ hbox2.pack_start(lab1, False, 0, 0)
102
+ lab1a = Gtk.Label(label=&#34; &#34;)
103
+ hbox2.pack_start(lab1a, False, 0, 0)
104
+ headx = Entryx(); headx.set_width_chars(33)
105
+ lab1.set_mnemonic_widget(headx)
106
+
107
+ if entry1[3] != None:
108
+ headx.set_text(entry1[3][entry1[1]])
109
+ hbox2.pack_start(headx, True, 0, 0)
110
+ lab3 = Gtk.Label(label=&#34; &#34;)
111
+ hbox2.pack_start(lab3, False, 0, 0)
112
+ arr.append((entry1[1], headx))
113
+
114
+ lab1b = Gtk.Label(label=&#34; &#34;)
115
+ hbox2.pack_start(lab1b, False, 0, 0)
116
+ lab2 = Gtk.Label.new_with_mnemonic(entry2[0]) ; lab2.set_alignment(1, 0)
117
+ lab2.set_tooltip_text(entry2[2])
118
+ hbox2.pack_start(lab2, False, 0, 0)
119
+ lab1b = Gtk.Label(label=&#34; &#34;)
120
+ hbox2.pack_start(lab1b, False, 0, 0)
121
+ headx2 = Entryx(); headx2.set_width_chars(33)
122
+ lab2.set_mnemonic_widget(headx2)
123
+ if entry2[3] != None:
124
+ headx2.set_text(entry2[3][entry2[1]])
125
+ hbox2.pack_start(headx2, True, 0, 0)
126
+ lab3b = Gtk.Label(label=&#34; &#34;)
127
+ hbox2.pack_start(lab3b, False, 0, 0)
128
+ arr.append((entry2[1], headx2))
129
+
130
+ #self.ySpacer(vbox)
131
+ vbox.pack_start(hbox2, True, True, 0)
132
+ return lab1, lab2
133
+
134
+ # Create a label entry pair
135
+ def entrypair(vbox, labtext, labname, tip, defval = None):
136
+
137
+ hbox2 = Gtk.HBox()
138
+ lab1b = Gtk.Label(label=&#34; &#34;)
139
+ hbox2.pack_start(lab1b, False, 0, 0)
140
+
141
+ lab1 = Gtk.Label.new_with_mnemonic(labtext) ; lab1.set_alignment(1, 0)
142
+ hbox2.pack_start(lab1, False, 0, 0)
143
+
144
+ lab1a = Gtk.Label(label=&#34; &#34;)
145
+ hbox2.pack_start(lab1a, False, 0, 0)
146
+
147
+ headx = Gtk.Entry();
148
+ if defval != None:
149
+ headx.set_text(defval[labname])
150
+ lab1.set_mnemonic_widget(headx)
151
+
152
+ hbox2.pack_start(headx, True, 0, 0)
153
+ lab3 = Gtk.Label(label=&#34; &#34;)
154
+ hbox2.pack_start(lab3, False, 0, 0)
155
+ arr.append((labname, headx))
156
+
157
+ pggui.ySpacer(vbox)
158
+ vbox.pack_start(hbox2, False, 0, 0)
159
+ lab1.set_tooltip_text(tip)
160
+
161
+ return lab1
162
+
163
+ def textviewpair(arr, vbox, labtext, labname, tip, defval=None, expand=False):
164
+
165
+ hbox2 = Gtk.HBox();
166
+ pggui.xSpacer(hbox2)
167
+
168
+ lab2a = Gtk.Label(label=&#34; &#34;)
169
+ hbox2.pack_start(lab2a, False , 0, 0)
170
+
171
+ lab2 = Gtk.Label.new_with_mnemonic(labtext); lab2.set_alignment(1, 0)
172
+ lab2.set_tooltip_text(tip)
173
+ hbox2.pack_start(lab2, False , 0, 0)
174
+ if defval:
175
+ sw = scrolledtext(arr, labname, defval[labname])
176
+ else:
177
+ sw = scrolledtext(arr, labname, defval)
178
+
179
+ lab2.set_mnemonic_widget(sw.textx)
180
+
181
+ pggui.xSpacer(hbox2)
182
+ hbox2.pack_start(sw, True, True, 0)
183
+ pggui.xSpacer(hbox2)
184
+ pggui.ySpacer(vbox)
185
+
186
+ lab2b = Gtk.Label(label=&#34; &#34;)
187
+ hbox2.pack_start(lab2b, False , 0, 0)
188
+ vbox.pack_start(hbox2, True, True, 0)
189
+ return lab2
190
+
191
+ def gridquad(gridx, left, top, entry1, entry2, butt = None):
192
+ lab1 = Gtk.Label.new_with_mnemonic(entry1[0] + &#34; &#34;)
193
+ lab1.set_alignment(1, 0)
194
+ lab1.set_tooltip_text(entry1[2])
195
+ gridx.attach(lab1, left, top, 1, 1)
196
+
197
+ headx = Entryx();
198
+ lab1.set_mnemonic_widget(headx)
199
+ headx.set_width_chars(20)
200
+ if entry1[3] != None:
201
+ headx.set_text(entry1[3])
202
+ gridx.attach(headx, left+1, top, 1, 1)
203
+
204
+ lab2 = Gtk.Label.new_with_mnemonic(&#34; &#34; + entry2[0] + &#34; &#34;)
205
+ lab2.set_alignment(1, 0)
206
+ lab2.set_tooltip_text(entry2[2])
207
+ gridx.attach(lab2, left+2, top, 1, 1)
208
+
209
+ headx2 = Entryx();
210
+ lab2.set_mnemonic_widget(headx2)
211
+
212
+ headx2.set_width_chars(20)
213
+ if entry2[3] != None:
214
+ headx2.set_text(entry2[3])
215
+ gridx.attach(headx2, left+3, top, 1, 1)
216
+ if butt:
217
+ gridx.attach(butt, left+4, top, 1, 1)
218
+ return headx, headx2
219
+
220
+ def griddouble(gridx, left, top, entry1, buttx = None):
221
+ lab1 = Gtk.Label.new_with_mnemonic(entry1[0] + &#34; &#34;)
222
+ lab1.set_alignment(1, 0)
223
+ lab1.set_tooltip_text(entry1[2])
224
+ gridx.attach(lab1, left, top, 1, 1)
225
+
226
+ headx = Entryx();
227
+ lab1.set_mnemonic_widget(headx)
228
+ headx.set_width_chars(40)
229
+ if entry1[3] != None:
230
+ headx.set_text(entry1[3])
231
+ gridx.attach(headx, left+1, top, 2, 1)
232
+ if buttx:
233
+ gridx.attach(buttx, left+3, top, 1, 1)
234
+ return headx
235
+
236
+ class TextViewx(Gtk.TextView):
237
+
238
+ &#39;&#39;&#39; Override textview for simple deployment &#39;&#39;&#39;
239
+
240
+ def __init__(self):
241
+ super(TextViewx).__init__()
242
+ GObject.GObject.__init__(self)
243
+ self.buffer = Gtk.TextBuffer()
244
+ self.set_buffer(self.buffer)
245
+ self.single_line = False
246
+ self.connect(&#34;key-press-event&#34;, self.key_press_event)
247
+
248
+ def key_press_event(self, arg1, event):
249
+
250
+ &#39;&#39;&#39; Override tabs &#39;&#39;&#39;
251
+
252
+ if event.keyval == Gdk.KEY_Tab or event.keyval == Gdk.KEY_ISO_Left_Tab:
253
+ #print(&#34;tab keypress &#34;, event.keyval, event.state)
254
+ if event.state &amp; Gdk.ModifierType.SHIFT_MASK:
255
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_BACKWARD)
256
+ else:
257
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
258
+ return True
259
+
260
+ # If reached last line, TAB it
261
+ if event.keyval == Gdk.KEY_Down:
262
+ pos = self.buffer.get_property(&#34;cursor-position&#34;)
263
+ #print(&#34;Down&#34;, pos)
264
+ #print(self.buffer.list_properties())
265
+ sss = self.buffer.get_start_iter()
266
+ eee = self.buffer.get_end_iter()
267
+ textx = self.buffer.get_text(sss, eee, True)
268
+ if pos == len(textx):
269
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
270
+ return True
271
+
272
+ # If reached first line, TAB it
273
+ if event.keyval == Gdk.KEY_Up:
274
+ # Are we at the beginning:
275
+ pos = self.buffer.get_property(&#34;cursor-position&#34;)
276
+ #print(&#34;Up&#34;, pos)
277
+ if pos == 0:
278
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_BACKWARD)
279
+ return True
280
+
281
+ if event.keyval == Gdk.KEY_Return:
282
+ if event.state &amp; Gdk.ModifierType.SHIFT_MASK:
283
+ #print(&#34;keypress shift &#34;, event)
284
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
285
+ return True
286
+
287
+ def get_text(self):
288
+ startt = self.buffer.get_start_iter()
289
+ endd = self.buffer.get_end_iter()
290
+ return self.buffer.get_text(startt, endd, False)
291
+
292
+ def set_text(self, txt, eventx = False):
293
+ if eventx:
294
+ self.check_saved()
295
+ startt = self.buffer.get_start_iter()
296
+ endd = self.buffer.get_end_iter()
297
+ self.buffer.delete(startt, endd)
298
+ self.buffer.insert(startt, txt)
299
+ self.buffer.set_modified(True)
300
+
301
+ def gridsingle(gridx, left, top, entry1):
302
+ lab1 = Gtk.Label.new_with_mnemonic(entry1[0] + &#34; &#34;)
303
+ lab1.set_alignment(1, 0)
304
+ lab1.set_tooltip_text(entry1[2])
305
+ gridx.attach(lab1, left, top, 1, 1)
306
+
307
+ headx, cont = wrap(TextViewx())
308
+ lab1.set_mnemonic_widget(cont)
309
+
310
+ if entry1[3] != None:
311
+ headx.set_text(entry1[3])
312
+ gridx.attach(headx, left+1, top, 3, 1)
313
+
314
+ return cont
315
+
316
+ def scrolledtext(arr, name, body = None):
317
+ textx = Gtk.TextView();
318
+ textx.set_border_width(4)
319
+ arr.append((name, textx))
320
+ if body != None:
321
+ #textx.grab_focus()
322
+ buff = Gtk.TextBuffer(); buff.set_text(body)
323
+ textx.set_buffer(buff)
324
+
325
+ sw = Gtk.ScrolledWindow()
326
+ sw.textx = textx
327
+ sw.add(textx)
328
+ sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
329
+ sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
330
+ return sw
331
+
332
+ def imgbutt(imgfile, txt, func, win):
333
+ hbb = Gtk.HBox(); vbb = Gtk.VBox(); ic = Gtk.Image();
334
+ ic.set_from_file(imgfile)
335
+ pb = ic.get_pixbuf();
336
+ #pb2 = pb.scale_simple(150, 150, GdkPixbuf.InterpType.BILINEAR)
337
+ pb2 = pb.scale_simple(150, 150, 0)
338
+ ic2 = Gtk.Image.new_from_pixbuf(pb2)
339
+ butt1d = Gtk.Button.new_with_mnemonic(txt)
340
+ butt1d.connect(&#34;clicked&#34;, func, win)
341
+
342
+ vbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
343
+ vbb.pack_start(ic2, False, 0, 0)
344
+ vbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
345
+ vbb.pack_start(butt1d, False, 0, 0)
346
+ vbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
347
+
348
+ hbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
349
+ hbb.pack_start(vbb, True, True, 0)
350
+ hbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
351
+
352
+ return hbb
353
+
354
+ # eof</code></pre>
355
+ </details>
356
+ </section>
357
+ <section>
358
+ </section>
359
+ <section>
360
+ </section>
361
+ <section>
362
+ <h2 class="section-title" id="header-functions">Functions</h2>
363
+ <dl>
364
+ <dt id="pgentry.entrypair"><code class="name flex">
365
+ <span>def <span class="ident">entrypair</span></span>(<span>vbox, labtext, labname, tip, defval=None)</span>
366
+ </code></dt>
367
+ <dd>
368
+ <div class="desc"></div>
369
+ <details class="source">
370
+ <summary>
371
+ <span>Expand source code</span>
372
+ </summary>
373
+ <pre><code class="python">def entrypair(vbox, labtext, labname, tip, defval = None):
374
+
375
+ hbox2 = Gtk.HBox()
376
+ lab1b = Gtk.Label(label=&#34; &#34;)
377
+ hbox2.pack_start(lab1b, False, 0, 0)
378
+
379
+ lab1 = Gtk.Label.new_with_mnemonic(labtext) ; lab1.set_alignment(1, 0)
380
+ hbox2.pack_start(lab1, False, 0, 0)
381
+
382
+ lab1a = Gtk.Label(label=&#34; &#34;)
383
+ hbox2.pack_start(lab1a, False, 0, 0)
384
+
385
+ headx = Gtk.Entry();
386
+ if defval != None:
387
+ headx.set_text(defval[labname])
388
+ lab1.set_mnemonic_widget(headx)
389
+
390
+ hbox2.pack_start(headx, True, 0, 0)
391
+ lab3 = Gtk.Label(label=&#34; &#34;)
392
+ hbox2.pack_start(lab3, False, 0, 0)
393
+ arr.append((labname, headx))
394
+
395
+ pggui.ySpacer(vbox)
396
+ vbox.pack_start(hbox2, False, 0, 0)
397
+ lab1.set_tooltip_text(tip)
398
+
399
+ return lab1</code></pre>
400
+ </details>
401
+ </dd>
402
+ <dt id="pgentry.entryquad"><code class="name flex">
403
+ <span>def <span class="ident">entryquad</span></span>(<span>arr, vbox, entry1, entry2)</span>
404
+ </code></dt>
405
+ <dd>
406
+ <div class="desc"></div>
407
+ <details class="source">
408
+ <summary>
409
+ <span>Expand source code</span>
410
+ </summary>
411
+ <pre><code class="python">def entryquad(arr, vbox, entry1, entry2):
412
+
413
+ hbox2 = Gtk.HBox(False, 2)
414
+
415
+ lab1a = Gtk.Label(label=&#34; &#34;)
416
+ hbox2.pack_start(lab1a, False, 0, 0)
417
+ lab1 = Gtk.Label.new_with_mnemonic(entry1[0]) ; lab1.set_alignment(1, 0)
418
+ lab1.set_tooltip_text(entry1[2])
419
+ hbox2.pack_start(lab1, False, 0, 0)
420
+ lab1a = Gtk.Label(label=&#34; &#34;)
421
+ hbox2.pack_start(lab1a, False, 0, 0)
422
+ headx = Entryx(); headx.set_width_chars(33)
423
+ lab1.set_mnemonic_widget(headx)
424
+
425
+ if entry1[3] != None:
426
+ headx.set_text(entry1[3][entry1[1]])
427
+ hbox2.pack_start(headx, True, 0, 0)
428
+ lab3 = Gtk.Label(label=&#34; &#34;)
429
+ hbox2.pack_start(lab3, False, 0, 0)
430
+ arr.append((entry1[1], headx))
431
+
432
+ lab1b = Gtk.Label(label=&#34; &#34;)
433
+ hbox2.pack_start(lab1b, False, 0, 0)
434
+ lab2 = Gtk.Label.new_with_mnemonic(entry2[0]) ; lab2.set_alignment(1, 0)
435
+ lab2.set_tooltip_text(entry2[2])
436
+ hbox2.pack_start(lab2, False, 0, 0)
437
+ lab1b = Gtk.Label(label=&#34; &#34;)
438
+ hbox2.pack_start(lab1b, False, 0, 0)
439
+ headx2 = Entryx(); headx2.set_width_chars(33)
440
+ lab2.set_mnemonic_widget(headx2)
441
+ if entry2[3] != None:
442
+ headx2.set_text(entry2[3][entry2[1]])
443
+ hbox2.pack_start(headx2, True, 0, 0)
444
+ lab3b = Gtk.Label(label=&#34; &#34;)
445
+ hbox2.pack_start(lab3b, False, 0, 0)
446
+ arr.append((entry2[1], headx2))
447
+
448
+ #self.ySpacer(vbox)
449
+ vbox.pack_start(hbox2, True, True, 0)
450
+ return lab1, lab2</code></pre>
451
+ </details>
452
+ </dd>
453
+ <dt id="pgentry.griddouble"><code class="name flex">
454
+ <span>def <span class="ident">griddouble</span></span>(<span>gridx, left, top, entry1, buttx=None)</span>
455
+ </code></dt>
456
+ <dd>
457
+ <div class="desc"></div>
458
+ <details class="source">
459
+ <summary>
460
+ <span>Expand source code</span>
461
+ </summary>
462
+ <pre><code class="python">def griddouble(gridx, left, top, entry1, buttx = None):
463
+ lab1 = Gtk.Label.new_with_mnemonic(entry1[0] + &#34; &#34;)
464
+ lab1.set_alignment(1, 0)
465
+ lab1.set_tooltip_text(entry1[2])
466
+ gridx.attach(lab1, left, top, 1, 1)
467
+
468
+ headx = Entryx();
469
+ lab1.set_mnemonic_widget(headx)
470
+ headx.set_width_chars(40)
471
+ if entry1[3] != None:
472
+ headx.set_text(entry1[3])
473
+ gridx.attach(headx, left+1, top, 2, 1)
474
+ if buttx:
475
+ gridx.attach(buttx, left+3, top, 1, 1)
476
+ return headx</code></pre>
477
+ </details>
478
+ </dd>
479
+ <dt id="pgentry.gridquad"><code class="name flex">
480
+ <span>def <span class="ident">gridquad</span></span>(<span>gridx, left, top, entry1, entry2, butt=None)</span>
481
+ </code></dt>
482
+ <dd>
483
+ <div class="desc"></div>
484
+ <details class="source">
485
+ <summary>
486
+ <span>Expand source code</span>
487
+ </summary>
488
+ <pre><code class="python">def gridquad(gridx, left, top, entry1, entry2, butt = None):
489
+ lab1 = Gtk.Label.new_with_mnemonic(entry1[0] + &#34; &#34;)
490
+ lab1.set_alignment(1, 0)
491
+ lab1.set_tooltip_text(entry1[2])
492
+ gridx.attach(lab1, left, top, 1, 1)
493
+
494
+ headx = Entryx();
495
+ lab1.set_mnemonic_widget(headx)
496
+ headx.set_width_chars(20)
497
+ if entry1[3] != None:
498
+ headx.set_text(entry1[3])
499
+ gridx.attach(headx, left+1, top, 1, 1)
500
+
501
+ lab2 = Gtk.Label.new_with_mnemonic(&#34; &#34; + entry2[0] + &#34; &#34;)
502
+ lab2.set_alignment(1, 0)
503
+ lab2.set_tooltip_text(entry2[2])
504
+ gridx.attach(lab2, left+2, top, 1, 1)
505
+
506
+ headx2 = Entryx();
507
+ lab2.set_mnemonic_widget(headx2)
508
+
509
+ headx2.set_width_chars(20)
510
+ if entry2[3] != None:
511
+ headx2.set_text(entry2[3])
512
+ gridx.attach(headx2, left+3, top, 1, 1)
513
+ if butt:
514
+ gridx.attach(butt, left+4, top, 1, 1)
515
+ return headx, headx2</code></pre>
516
+ </details>
517
+ </dd>
518
+ <dt id="pgentry.gridsingle"><code class="name flex">
519
+ <span>def <span class="ident">gridsingle</span></span>(<span>gridx, left, top, entry1)</span>
520
+ </code></dt>
521
+ <dd>
522
+ <div class="desc"></div>
523
+ <details class="source">
524
+ <summary>
525
+ <span>Expand source code</span>
526
+ </summary>
527
+ <pre><code class="python">def gridsingle(gridx, left, top, entry1):
528
+ lab1 = Gtk.Label.new_with_mnemonic(entry1[0] + &#34; &#34;)
529
+ lab1.set_alignment(1, 0)
530
+ lab1.set_tooltip_text(entry1[2])
531
+ gridx.attach(lab1, left, top, 1, 1)
532
+
533
+ headx, cont = wrap(TextViewx())
534
+ lab1.set_mnemonic_widget(cont)
535
+
536
+ if entry1[3] != None:
537
+ headx.set_text(entry1[3])
538
+ gridx.attach(headx, left+1, top, 3, 1)
539
+
540
+ return cont</code></pre>
541
+ </details>
542
+ </dd>
543
+ <dt id="pgentry.imgbutt"><code class="name flex">
544
+ <span>def <span class="ident">imgbutt</span></span>(<span>imgfile, txt, func, win)</span>
545
+ </code></dt>
546
+ <dd>
547
+ <div class="desc"></div>
548
+ <details class="source">
549
+ <summary>
550
+ <span>Expand source code</span>
551
+ </summary>
552
+ <pre><code class="python">def imgbutt(imgfile, txt, func, win):
553
+ hbb = Gtk.HBox(); vbb = Gtk.VBox(); ic = Gtk.Image();
554
+ ic.set_from_file(imgfile)
555
+ pb = ic.get_pixbuf();
556
+ #pb2 = pb.scale_simple(150, 150, GdkPixbuf.InterpType.BILINEAR)
557
+ pb2 = pb.scale_simple(150, 150, 0)
558
+ ic2 = Gtk.Image.new_from_pixbuf(pb2)
559
+ butt1d = Gtk.Button.new_with_mnemonic(txt)
560
+ butt1d.connect(&#34;clicked&#34;, func, win)
561
+
562
+ vbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
563
+ vbb.pack_start(ic2, False, 0, 0)
564
+ vbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
565
+ vbb.pack_start(butt1d, False, 0, 0)
566
+ vbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
567
+
568
+ hbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
569
+ hbb.pack_start(vbb, True, True, 0)
570
+ hbb.pack_start(Gtk.Label(label=&#34; &#34;), True, True, 0)
571
+
572
+ return hbb</code></pre>
573
+ </details>
574
+ </dd>
575
+ <dt id="pgentry.scrolledtext"><code class="name flex">
576
+ <span>def <span class="ident">scrolledtext</span></span>(<span>arr, name, body=None)</span>
577
+ </code></dt>
578
+ <dd>
579
+ <div class="desc"></div>
580
+ <details class="source">
581
+ <summary>
582
+ <span>Expand source code</span>
583
+ </summary>
584
+ <pre><code class="python">def scrolledtext(arr, name, body = None):
585
+ textx = Gtk.TextView();
586
+ textx.set_border_width(4)
587
+ arr.append((name, textx))
588
+ if body != None:
589
+ #textx.grab_focus()
590
+ buff = Gtk.TextBuffer(); buff.set_text(body)
591
+ textx.set_buffer(buff)
592
+
593
+ sw = Gtk.ScrolledWindow()
594
+ sw.textx = textx
595
+ sw.add(textx)
596
+ sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
597
+ sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
598
+ return sw</code></pre>
599
+ </details>
600
+ </dd>
601
+ <dt id="pgentry.textviewpair"><code class="name flex">
602
+ <span>def <span class="ident">textviewpair</span></span>(<span>arr, vbox, labtext, labname, tip, defval=None, expand=False)</span>
603
+ </code></dt>
604
+ <dd>
605
+ <div class="desc"></div>
606
+ <details class="source">
607
+ <summary>
608
+ <span>Expand source code</span>
609
+ </summary>
610
+ <pre><code class="python">def textviewpair(arr, vbox, labtext, labname, tip, defval=None, expand=False):
611
+
612
+ hbox2 = Gtk.HBox();
613
+ pggui.xSpacer(hbox2)
614
+
615
+ lab2a = Gtk.Label(label=&#34; &#34;)
616
+ hbox2.pack_start(lab2a, False , 0, 0)
617
+
618
+ lab2 = Gtk.Label.new_with_mnemonic(labtext); lab2.set_alignment(1, 0)
619
+ lab2.set_tooltip_text(tip)
620
+ hbox2.pack_start(lab2, False , 0, 0)
621
+ if defval:
622
+ sw = scrolledtext(arr, labname, defval[labname])
623
+ else:
624
+ sw = scrolledtext(arr, labname, defval)
625
+
626
+ lab2.set_mnemonic_widget(sw.textx)
627
+
628
+ pggui.xSpacer(hbox2)
629
+ hbox2.pack_start(sw, True, True, 0)
630
+ pggui.xSpacer(hbox2)
631
+ pggui.ySpacer(vbox)
632
+
633
+ lab2b = Gtk.Label(label=&#34; &#34;)
634
+ hbox2.pack_start(lab2b, False , 0, 0)
635
+ vbox.pack_start(hbox2, True, True, 0)
636
+ return lab2</code></pre>
637
+ </details>
638
+ </dd>
639
+ <dt id="pgentry.wrap"><code class="name flex">
640
+ <span>def <span class="ident">wrap</span></span>(<span>cont)</span>
641
+ </code></dt>
642
+ <dd>
643
+ <div class="desc"></div>
644
+ <details class="source">
645
+ <summary>
646
+ <span>Expand source code</span>
647
+ </summary>
648
+ <pre><code class="python">def wrap(cont):
649
+ fr = Gtk.Frame()
650
+ sc = Gtk.ScrolledWindow()
651
+ sc.set_hexpand(True)
652
+ sc.set_vexpand(True)
653
+ sc.add(cont)
654
+ fr.add(sc)
655
+ return fr, cont</code></pre>
656
+ </details>
657
+ </dd>
658
+ </dl>
659
+ </section>
660
+ <section>
661
+ <h2 class="section-title" id="header-classes">Classes</h2>
662
+ <dl>
663
+ <dt id="pgentry.Entryx"><code class="flex name class">
664
+ <span>class <span class="ident">Entryx</span></span>
665
+ <span>(</span><span>noemit=False)</span>
666
+ </code></dt>
667
+ <dd>
668
+ <div class="desc"><p>:Constructors:</p>
669
+ <p>::</p>
670
+ <pre><code>Entry(**properties)
671
+ new() -&gt; Gtk.Widget
672
+ new_with_buffer(buffer:Gtk.EntryBuffer) -&gt; Gtk.Widget
673
+ </code></pre></div>
674
+ <details class="source">
675
+ <summary>
676
+ <span>Expand source code</span>
677
+ </summary>
678
+ <pre><code class="python">class Entryx(Gtk.Entry):
679
+
680
+ def __init__(self, noemit = False):
681
+ super(Entryx).__init__()
682
+ Gtk.Entry.__init__(self)
683
+ self.noemit = noemit # do not emit move next on enter
684
+ self.connect(&#34;key-press-event&#34;, self.key_press_event)
685
+
686
+ def set_noemit(self, flag):
687
+ self.noemit = flag
688
+
689
+ def set_gray(self, flag):
690
+ if flag:
691
+ self.set_editable(False);
692
+ style = self.get_style_context()
693
+ color = style.get_background_color(Gtk.StateFlags.NORMAL)
694
+ color2 = Gdk.RGBA(color.red-.1, color.green-.1, color.blue-.1)
695
+ self.override_background_color(Gtk.StateFlags.NORMAL, color2)
696
+ else:
697
+ self.set_editable(True);
698
+ style = self.get_style_context()
699
+ color = style.get_background_color(Gtk.StateFlags.NORMAL)
700
+ self.override_background_color(Gtk.StateFlags.NORMAL, color)
701
+
702
+ def key_press_event(self, arg1, event):
703
+ #print(&#34;keypress&#34;, event.keyval)
704
+ if event.keyval == Gdk.KEY_Tab or event.keyval == Gdk.KEY_ISO_Left_Tab:
705
+ #print(&#34;tab keypress &#34;, event.keyval, event.state)
706
+ if event.state &amp; Gdk.ModifierType.SHIFT_MASK:
707
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_BACKWARD)
708
+ else:
709
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
710
+ return True
711
+
712
+ if event.keyval == Gdk.KEY_Return:
713
+ if not self.noemit:
714
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
715
+ return True</code></pre>
716
+ </details>
717
+ <h3>Ancestors</h3>
718
+ <ul class="hlist">
719
+ <li>gi.repository.Gtk.Entry</li>
720
+ <li>gi.overrides.Gtk.Widget</li>
721
+ <li>gi.repository.Gtk.Widget</li>
722
+ <li>gi.repository.GObject.InitiallyUnowned</li>
723
+ <li>gi.overrides.GObject.Object</li>
724
+ <li>gi.repository.GObject.Object</li>
725
+ <li>gi._gi.GObject</li>
726
+ <li>gi.repository.Atk.ImplementorIface</li>
727
+ <li>gi.repository.Gtk.Buildable</li>
728
+ <li>gi.repository.Gtk.CellEditable</li>
729
+ <li>gi.overrides.Gtk.Editable</li>
730
+ <li>gi.repository.Gtk.Editable</li>
731
+ <li>gobject.GInterface</li>
732
+ </ul>
733
+ <h3>Methods</h3>
734
+ <dl>
735
+ <dt id="pgentry.Entryx.key_press_event"><code class="name flex">
736
+ <span>def <span class="ident">key_press_event</span></span>(<span>self, arg1, event)</span>
737
+ </code></dt>
738
+ <dd>
739
+ <div class="desc"></div>
740
+ <details class="source">
741
+ <summary>
742
+ <span>Expand source code</span>
743
+ </summary>
744
+ <pre><code class="python">def key_press_event(self, arg1, event):
745
+ #print(&#34;keypress&#34;, event.keyval)
746
+ if event.keyval == Gdk.KEY_Tab or event.keyval == Gdk.KEY_ISO_Left_Tab:
747
+ #print(&#34;tab keypress &#34;, event.keyval, event.state)
748
+ if event.state &amp; Gdk.ModifierType.SHIFT_MASK:
749
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_BACKWARD)
750
+ else:
751
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
752
+ return True
753
+
754
+ if event.keyval == Gdk.KEY_Return:
755
+ if not self.noemit:
756
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
757
+ return True</code></pre>
758
+ </details>
759
+ </dd>
760
+ <dt id="pgentry.Entryx.set_gray"><code class="name flex">
761
+ <span>def <span class="ident">set_gray</span></span>(<span>self, flag)</span>
762
+ </code></dt>
763
+ <dd>
764
+ <div class="desc"></div>
765
+ <details class="source">
766
+ <summary>
767
+ <span>Expand source code</span>
768
+ </summary>
769
+ <pre><code class="python">def set_gray(self, flag):
770
+ if flag:
771
+ self.set_editable(False);
772
+ style = self.get_style_context()
773
+ color = style.get_background_color(Gtk.StateFlags.NORMAL)
774
+ color2 = Gdk.RGBA(color.red-.1, color.green-.1, color.blue-.1)
775
+ self.override_background_color(Gtk.StateFlags.NORMAL, color2)
776
+ else:
777
+ self.set_editable(True);
778
+ style = self.get_style_context()
779
+ color = style.get_background_color(Gtk.StateFlags.NORMAL)
780
+ self.override_background_color(Gtk.StateFlags.NORMAL, color)</code></pre>
781
+ </details>
782
+ </dd>
783
+ <dt id="pgentry.Entryx.set_noemit"><code class="name flex">
784
+ <span>def <span class="ident">set_noemit</span></span>(<span>self, flag)</span>
785
+ </code></dt>
786
+ <dd>
787
+ <div class="desc"></div>
788
+ <details class="source">
789
+ <summary>
790
+ <span>Expand source code</span>
791
+ </summary>
792
+ <pre><code class="python">def set_noemit(self, flag):
793
+ self.noemit = flag</code></pre>
794
+ </details>
795
+ </dd>
796
+ </dl>
797
+ </dd>
798
+ <dt id="pgentry.TextViewx"><code class="flex name class">
799
+ <span>class <span class="ident">TextViewx</span></span>
800
+ </code></dt>
801
+ <dd>
802
+ <div class="desc"><p>Override textview for simple deployment</p></div>
803
+ <details class="source">
804
+ <summary>
805
+ <span>Expand source code</span>
806
+ </summary>
807
+ <pre><code class="python">class TextViewx(Gtk.TextView):
808
+
809
+ &#39;&#39;&#39; Override textview for simple deployment &#39;&#39;&#39;
810
+
811
+ def __init__(self):
812
+ super(TextViewx).__init__()
813
+ GObject.GObject.__init__(self)
814
+ self.buffer = Gtk.TextBuffer()
815
+ self.set_buffer(self.buffer)
816
+ self.single_line = False
817
+ self.connect(&#34;key-press-event&#34;, self.key_press_event)
818
+
819
+ def key_press_event(self, arg1, event):
820
+
821
+ &#39;&#39;&#39; Override tabs &#39;&#39;&#39;
822
+
823
+ if event.keyval == Gdk.KEY_Tab or event.keyval == Gdk.KEY_ISO_Left_Tab:
824
+ #print(&#34;tab keypress &#34;, event.keyval, event.state)
825
+ if event.state &amp; Gdk.ModifierType.SHIFT_MASK:
826
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_BACKWARD)
827
+ else:
828
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
829
+ return True
830
+
831
+ # If reached last line, TAB it
832
+ if event.keyval == Gdk.KEY_Down:
833
+ pos = self.buffer.get_property(&#34;cursor-position&#34;)
834
+ #print(&#34;Down&#34;, pos)
835
+ #print(self.buffer.list_properties())
836
+ sss = self.buffer.get_start_iter()
837
+ eee = self.buffer.get_end_iter()
838
+ textx = self.buffer.get_text(sss, eee, True)
839
+ if pos == len(textx):
840
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
841
+ return True
842
+
843
+ # If reached first line, TAB it
844
+ if event.keyval == Gdk.KEY_Up:
845
+ # Are we at the beginning:
846
+ pos = self.buffer.get_property(&#34;cursor-position&#34;)
847
+ #print(&#34;Up&#34;, pos)
848
+ if pos == 0:
849
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_BACKWARD)
850
+ return True
851
+
852
+ if event.keyval == Gdk.KEY_Return:
853
+ if event.state &amp; Gdk.ModifierType.SHIFT_MASK:
854
+ #print(&#34;keypress shift &#34;, event)
855
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
856
+ return True
857
+
858
+ def get_text(self):
859
+ startt = self.buffer.get_start_iter()
860
+ endd = self.buffer.get_end_iter()
861
+ return self.buffer.get_text(startt, endd, False)
862
+
863
+ def set_text(self, txt, eventx = False):
864
+ if eventx:
865
+ self.check_saved()
866
+ startt = self.buffer.get_start_iter()
867
+ endd = self.buffer.get_end_iter()
868
+ self.buffer.delete(startt, endd)
869
+ self.buffer.insert(startt, txt)
870
+ self.buffer.set_modified(True)</code></pre>
871
+ </details>
872
+ <h3>Ancestors</h3>
873
+ <ul class="hlist">
874
+ <li>gi.repository.Gtk.TextView</li>
875
+ <li>gi.overrides.Gtk.Container</li>
876
+ <li>gi.repository.Gtk.Container</li>
877
+ <li>gi.overrides.Gtk.Widget</li>
878
+ <li>gi.repository.Gtk.Widget</li>
879
+ <li>gi.repository.GObject.InitiallyUnowned</li>
880
+ <li>gi.overrides.GObject.Object</li>
881
+ <li>gi.repository.GObject.Object</li>
882
+ <li>gi._gi.GObject</li>
883
+ <li>gi.repository.Atk.ImplementorIface</li>
884
+ <li>gi.repository.Gtk.Buildable</li>
885
+ <li>gi.repository.Gtk.Scrollable</li>
886
+ <li>gobject.GInterface</li>
887
+ </ul>
888
+ <h3>Methods</h3>
889
+ <dl>
890
+ <dt id="pgentry.TextViewx.get_text"><code class="name flex">
891
+ <span>def <span class="ident">get_text</span></span>(<span>self)</span>
892
+ </code></dt>
893
+ <dd>
894
+ <div class="desc"></div>
895
+ <details class="source">
896
+ <summary>
897
+ <span>Expand source code</span>
898
+ </summary>
899
+ <pre><code class="python">def get_text(self):
900
+ startt = self.buffer.get_start_iter()
901
+ endd = self.buffer.get_end_iter()
902
+ return self.buffer.get_text(startt, endd, False)</code></pre>
903
+ </details>
904
+ </dd>
905
+ <dt id="pgentry.TextViewx.key_press_event"><code class="name flex">
906
+ <span>def <span class="ident">key_press_event</span></span>(<span>self, arg1, event)</span>
907
+ </code></dt>
908
+ <dd>
909
+ <div class="desc"><p>Override tabs</p></div>
910
+ <details class="source">
911
+ <summary>
912
+ <span>Expand source code</span>
913
+ </summary>
914
+ <pre><code class="python">def key_press_event(self, arg1, event):
915
+
916
+ &#39;&#39;&#39; Override tabs &#39;&#39;&#39;
917
+
918
+ if event.keyval == Gdk.KEY_Tab or event.keyval == Gdk.KEY_ISO_Left_Tab:
919
+ #print(&#34;tab keypress &#34;, event.keyval, event.state)
920
+ if event.state &amp; Gdk.ModifierType.SHIFT_MASK:
921
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_BACKWARD)
922
+ else:
923
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
924
+ return True
925
+
926
+ # If reached last line, TAB it
927
+ if event.keyval == Gdk.KEY_Down:
928
+ pos = self.buffer.get_property(&#34;cursor-position&#34;)
929
+ #print(&#34;Down&#34;, pos)
930
+ #print(self.buffer.list_properties())
931
+ sss = self.buffer.get_start_iter()
932
+ eee = self.buffer.get_end_iter()
933
+ textx = self.buffer.get_text(sss, eee, True)
934
+ if pos == len(textx):
935
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
936
+ return True
937
+
938
+ # If reached first line, TAB it
939
+ if event.keyval == Gdk.KEY_Up:
940
+ # Are we at the beginning:
941
+ pos = self.buffer.get_property(&#34;cursor-position&#34;)
942
+ #print(&#34;Up&#34;, pos)
943
+ if pos == 0:
944
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_BACKWARD)
945
+ return True
946
+
947
+ if event.keyval == Gdk.KEY_Return:
948
+ if event.state &amp; Gdk.ModifierType.SHIFT_MASK:
949
+ #print(&#34;keypress shift &#34;, event)
950
+ self.emit(&#34;move-focus&#34;, Gtk.DirectionType.TAB_FORWARD)
951
+ return True</code></pre>
952
+ </details>
953
+ </dd>
954
+ <dt id="pgentry.TextViewx.set_text"><code class="name flex">
955
+ <span>def <span class="ident">set_text</span></span>(<span>self, txt, eventx=False)</span>
956
+ </code></dt>
957
+ <dd>
958
+ <div class="desc"></div>
959
+ <details class="source">
960
+ <summary>
961
+ <span>Expand source code</span>
962
+ </summary>
963
+ <pre><code class="python">def set_text(self, txt, eventx = False):
964
+ if eventx:
965
+ self.check_saved()
966
+ startt = self.buffer.get_start_iter()
967
+ endd = self.buffer.get_end_iter()
968
+ self.buffer.delete(startt, endd)
969
+ self.buffer.insert(startt, txt)
970
+ self.buffer.set_modified(True)</code></pre>
971
+ </details>
972
+ </dd>
973
+ </dl>
974
+ </dd>
975
+ </dl>
976
+ </section>
977
+ </article>
978
+ <nav id="sidebar">
979
+ <h1>Index</h1>
980
+ <div class="toc">
981
+ <ul></ul>
982
+ </div>
983
+ <ul id="index">
984
+ <li><h3><a href="#header-functions">Functions</a></h3>
985
+ <ul class="two-column">
986
+ <li><code><a title="pgentry.entrypair" href="#pgentry.entrypair">entrypair</a></code></li>
987
+ <li><code><a title="pgentry.entryquad" href="#pgentry.entryquad">entryquad</a></code></li>
988
+ <li><code><a title="pgentry.griddouble" href="#pgentry.griddouble">griddouble</a></code></li>
989
+ <li><code><a title="pgentry.gridquad" href="#pgentry.gridquad">gridquad</a></code></li>
990
+ <li><code><a title="pgentry.gridsingle" href="#pgentry.gridsingle">gridsingle</a></code></li>
991
+ <li><code><a title="pgentry.imgbutt" href="#pgentry.imgbutt">imgbutt</a></code></li>
992
+ <li><code><a title="pgentry.scrolledtext" href="#pgentry.scrolledtext">scrolledtext</a></code></li>
993
+ <li><code><a title="pgentry.textviewpair" href="#pgentry.textviewpair">textviewpair</a></code></li>
994
+ <li><code><a title="pgentry.wrap" href="#pgentry.wrap">wrap</a></code></li>
995
+ </ul>
996
+ </li>
997
+ <li><h3><a href="#header-classes">Classes</a></h3>
998
+ <ul>
999
+ <li>
1000
+ <h4><code><a title="pgentry.Entryx" href="#pgentry.Entryx">Entryx</a></code></h4>
1001
+ <ul class="">
1002
+ <li><code><a title="pgentry.Entryx.key_press_event" href="#pgentry.Entryx.key_press_event">key_press_event</a></code></li>
1003
+ <li><code><a title="pgentry.Entryx.set_gray" href="#pgentry.Entryx.set_gray">set_gray</a></code></li>
1004
+ <li><code><a title="pgentry.Entryx.set_noemit" href="#pgentry.Entryx.set_noemit">set_noemit</a></code></li>
1005
+ </ul>
1006
+ </li>
1007
+ <li>
1008
+ <h4><code><a title="pgentry.TextViewx" href="#pgentry.TextViewx">TextViewx</a></code></h4>
1009
+ <ul class="">
1010
+ <li><code><a title="pgentry.TextViewx.get_text" href="#pgentry.TextViewx.get_text">get_text</a></code></li>
1011
+ <li><code><a title="pgentry.TextViewx.key_press_event" href="#pgentry.TextViewx.key_press_event">key_press_event</a></code></li>
1012
+ <li><code><a title="pgentry.TextViewx.set_text" href="#pgentry.TextViewx.set_text">set_text</a></code></li>
1013
+ </ul>
1014
+ </li>
1015
+ </ul>
1016
+ </li>
1017
+ </ul>
1018
+ </nav>
1019
+ </main>
1020
+ <footer id="footer">
1021
+ <p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
1022
+ </footer>
1023
+ </body>
1024
+ </html>