Size: 19375
Comment:
|
Size: 18326
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
## page was renamed from Custom settings dialog (Phoenix) ## page was renamed from TextCtrlAutoComplete (Phoenix) |
|
Line 37: | Line 35: |
# class App | # class MyApp |
Line 44: | Line 42: |
""" | """ |
Line 51: | Line 49: |
Line 59: | Line 57: |
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) | font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) |
Line 63: | Line 61: |
Line 68: | Line 66: |
Line 72: | Line 70: |
Line 77: | Line 75: |
Line 92: | Line 90: |
Line 99: | Line 97: |
#------------ |
#------------ |
Line 105: | Line 103: |
Line 110: | Line 108: |
Line 114: | Line 112: |
Line 120: | Line 118: |
""" | """ |
Line 127: | Line 125: |
Line 134: | Line 132: |
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) | font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) |
Line 138: | Line 136: |
Line 143: | Line 141: |
Line 147: | Line 145: |
Line 152: | Line 150: |
Line 157: | Line 155: |
Line 167: | Line 165: |
Line 174: | Line 172: |
#------------ |
#------------ |
Line 180: | Line 178: |
Line 185: | Line 183: |
Line 189: | Line 187: |
Line 195: | Line 193: |
""" | """ |
Line 202: | Line 200: |
Line 209: | Line 207: |
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) | font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) |
Line 213: | Line 211: |
Line 218: | Line 216: |
Line 227: | Line 225: |
Line 232: | Line 230: |
Line 242: | Line 240: |
Line 249: | Line 247: |
#------------ |
#------------ |
Line 255: | Line 253: |
Line 260: | Line 258: |
Line 264: | Line 262: |
Line 270: | Line 268: |
""" | """ |
Line 277: | Line 275: |
Line 284: | Line 282: |
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) | font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) |
Line 288: | Line 286: |
Line 293: | Line 291: |
Line 302: | Line 300: |
Line 307: | Line 305: |
Line 317: | Line 315: |
#------------ |
#------------ |
Line 326: | Line 324: |
Line 330: | Line 328: |
Line 335: | Line 333: |
Line 339: | Line 337: |
#--------------------------------------------------------------------------- |
#--------------------------------------------------------------------------- |
Line 345: | Line 343: |
""" | """ |
Line 353: | Line 351: |
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) | font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) |
Line 357: | Line 355: |
Line 361: | Line 359: |
#------------ |
#------------ |
Line 375: | Line 373: |
wx.LB_SINGLE) | wx.LB_SINGLE) |
Line 381: | Line 379: |
Line 401: | Line 399: |
Line 403: | Line 401: |
Line 409: | Line 407: |
Line 413: | Line 411: |
Line 417: | Line 415: |
""" | """ |
Line 422: | Line 420: |
Line 429: | Line 427: |
Line 431: | Line 429: |
Line 434: | Line 432: |
Line 438: | Line 436: |
Line 441: | Line 439: |
Line 452: | Line 450: |
Line 461: | Line 459: |
Line 465: | Line 463: |
""" | """ |
Line 476: | Line 474: |
#------------ # Attributes. |
#------------ # Attributes. |
Line 481: | Line 479: |
Line 488: | Line 486: |
#------------ |
#------------ |
Line 495: | Line 493: |
Line 498: | Line 496: |
#----------------------------------------------------------------------- |
#----------------------------------------------------------------------- |
Line 505: | Line 503: |
Line 511: | Line 509: |
Line 516: | Line 514: |
Line 519: | Line 517: |
self.btnSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL) |
self.btnSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL) |
Line 527: | Line 525: |
mainSizer = wx.BoxSizer(wx.HORIZONTAL) | mainSizer = wx.BoxSizer(wx.HORIZONTAL) |
Line 533: | Line 531: |
Line 536: | Line 534: |
Line 539: | Line 537: |
Line 545: | Line 543: |
""" | """ |
Line 550: | Line 548: |
Line 557: | Line 555: |
Line 565: | Line 563: |
Line 567: | Line 565: |
Line 578: | Line 576: |
Line 581: | Line 579: |
def CreateCtrls(self): |
def CreateCtrls(self): |
Line 592: | Line 590: |
# Add some buttons. |
# Add some buttons. |
Line 601: | Line 599: |
Line 610: | Line 608: |
Line 614: | Line 612: |
Line 620: | Line 618: |
Line 624: | Line 622: |
# wx.BoxSizer(window, proportion, flag, border) # wx.BoxSizer(sizer, proportion, flag, border) |
# wx.BoxSizer(window, proportion, flag, border) # wx.BoxSizer(sizer, proportion, flag, border) |
Line 628: | Line 626: |
Line 636: | Line 634: |
Line 641: | Line 639: |
Line 649: | Line 647: |
Line 654: | Line 652: |
Line 663: | Line 661: |
Line 667: | Line 665: |
""" | """ |
Line 675: | Line 673: |
Line 679: | Line 677: |
Line 687: | Line 685: |
Line 692: | Line 690: |
Customized settings dialog (Phoenix)
Keywords : Dialog, Settings, ListBox, FourWaySplitter, Scrolledpanel, StaticBoxSizer, StaticBox.
Contents
Demonstrating :
Tested py3.x, wx4.x and Win10.
Are you ready to use some samples ?
Test, modify, correct, improve and share your discoveries !
Settings dialog
ICON file : icon_wxWidgets.ico
Toggle line numbers
1 # sample_one.py
2
3 import sys
4 import os
5 import wx
6 import wx.lib.agw.fourwaysplitter as FWS
7 import wx.lib.scrolledpanel as scrolled
8
9 # class MyGeneralPane
10 # class MyInterfacePane
11 # class MySourcePane
12 # class MyLanguagePane
13 # class MyControlPane
14 # class MySplitterPanel
15 # class MySettingDialog
16 # class MyFrame
17 # class MyApp
18
19 #---------------------------------------------------------------------------
20
21 class MyGeneralPane(wx.Panel):
22 """
23 ...
24 """
25 def __init__(self, parent):
26 wx.Panel.__init__(self, parent,
27 style=wx.BORDER_THEME |
28 wx.TAB_TRAVERSAL)
29
30 #------------
31
32
33 labels = 'One Two Three Four Five Six Seven Eight Nine Ten Eleven Twelve Thirteen Fourteen Firteen'.split()
34
35 #------------
36
37 # Font, size and style.
38 font = self.GetFont().GetPointSize()
39 font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
40 font.SetWeight(wx.BOLD)
41
42 #------------
43
44 sizer = wx.BoxSizer(wx.VERTICAL)
45 self.SetSizer(sizer)
46
47 #------------
48
49 sbox = wx.StaticBox(self, -1, " General : ")
50 sbox.SetForegroundColour("#0068c6")
51 sbox.SetFont(font)
52
53 ssizer = wx.StaticBoxSizer(sbox, wx.VERTICAL)
54 sizer.Add(ssizer, 1, wx.EXPAND | wx.ALL, 10)
55
56 #------------
57
58 spanel = scrolled.ScrolledPanel(self, -1)
59 ssizer.Add(spanel, 1, wx.EXPAND)
60
61 #------------
62
63 spsizer = wx.BoxSizer(wx.VERTICAL)
64 spanel.SetSizer(spsizer)
65 for label in labels:
66 self.chkbx = wx.CheckBox(spanel,
67 label=label,
68 size=(-1,-1))
69 spsizer.Add(self.chkbx, flag=wx.ALL, border=10)
70
71 self.Bind(wx.EVT_CHECKBOX, self.OnPass, self.chkbx)
72
73 #------------
74
75 spanel.SetupScrolling(scroll_x=False,
76 scroll_y=True,
77 rate_y=10,
78 scrollToTop=True)
79
80 #------------
81
82 sizer.Layout()
83
84 #-----------------------------------------------------------------------
85
86 def OnPass(self, event):
87 """
88 Just grouping the empty event handlers together.
89 """
90
91 print("Hello 1 !")
92
93 pass
94
95 #---------------------------------------------------------------------------
96
97 class MyInterfacePane(wx.Panel):
98 """
99 ...
100 """
101 def __init__(self, parent):
102 wx.Panel.__init__(self, parent,
103 style=wx.BORDER_THEME |
104 wx.TAB_TRAVERSAL)
105
106 #------------
107
108 labels = 'One Two Three Four Five Six Seven Eight Nine Ten Eleven Twelve Thirteen Fourteen Firteen'.split()
109
110 #------------
111
112 # Font, size and style.
113 font = self.GetFont().GetPointSize()
114 font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
115 font.SetWeight(wx.BOLD)
116
117 #------------
118
119 sizer = wx.BoxSizer(wx.VERTICAL)
120 self.SetSizer(sizer)
121
122 #------------
123
124 sbox = wx.StaticBox(self, -1, " User interface : ")
125 sbox.SetForegroundColour("#0068c6")
126 sbox.SetFont(font)
127
128 ssizer = wx.StaticBoxSizer(sbox, wx.VERTICAL)
129 sizer.Add(ssizer, 1, wx.EXPAND | wx.ALL, 10)
130
131 #------------
132
133 spanel = scrolled.ScrolledPanel(self, -1)
134 ssizer.Add(spanel, 1, wx.EXPAND)
135
136 #------------
137
138 spsizer = wx.BoxSizer(wx.VERTICAL)
139 spanel.SetSizer(spsizer)
140 for label in labels:
141 self.btn = wx.Button(spanel,
142 label=label,
143 size=(-1,50))
144 spsizer.Add(self.btn, flag=wx.ALL, border=2)
145
146 self.Bind(wx.EVT_BUTTON, self.OnPass, self.btn)
147
148 #------------
149
150 spanel.SetupScrolling(scroll_x=False,
151 scroll_y=True,
152 rate_y=10,
153 scrollToTop=False)
154
155 #------------
156
157 sizer.Layout()
158
159 #-----------------------------------------------------------------------
160
161 def OnPass(self, event):
162 """
163 Just grouping the empty event handlers together.
164 """
165
166 print("Hello 2 !")
167
168 pass
169
170 #---------------------------------------------------------------------------
171
172 class MySourcePane(wx.Panel):
173 """
174 ...
175 """
176 def __init__(self, parent):
177 wx.Panel.__init__(self, parent,
178 style=wx.BORDER_THEME |
179 wx.TAB_TRAVERSAL)
180
181 #------------
182
183 labels = 'One Two Three Four Five Six Seven Eight Nine Ten Eleven Twelve Thirteen Fourteen Firteen'.split()
184
185 #------------
186
187 # Font, size and style.
188 font = self.GetFont().GetPointSize()
189 font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
190 font.SetWeight(wx.BOLD)
191
192 #------------
193
194 sizer = wx.BoxSizer(wx.VERTICAL)
195 self.SetSizer(sizer)
196
197 #------------
198
199 sbox = wx.StaticBox(self, -1, " Path : ")
200 sbox.SetForegroundColour("#0068c6")
201 sbox.SetFont(font)
202
203 ssizer = wx.StaticBoxSizer(sbox, wx.VERTICAL)
204 sizer.Add(ssizer, 1, wx.EXPAND | wx.ALL, 10)
205
206 #------------
207
208 spanel = scrolled.ScrolledPanel(self, -1)
209 ssizer.Add(spanel, 1, wx.EXPAND)
210
211 #------------
212
213 spsizer = wx.BoxSizer(wx.VERTICAL)
214 spanel.SetSizer(spsizer)
215 for label in labels:
216 self.chkbx = wx.CheckBox(spanel,
217 label=label,
218 size=(-1,-1))
219 spsizer.Add(self.chkbx, flag=wx.ALL, border=10)
220
221 self.Bind(wx.EVT_CHECKBOX, self.OnPass, self.chkbx)
222
223 #------------
224
225 spanel.SetupScrolling(scroll_x=False,
226 scroll_y=True,
227 rate_y=10,
228 scrollToTop=False)
229
230 #------------
231
232 sizer.Layout()
233
234 #-----------------------------------------------------------------------
235
236 def OnPass(self, event):
237 """
238 Just grouping the empty event handlers together.
239 """
240
241 print("Hello 3 !")
242
243 pass
244
245 #---------------------------------------------------------------------------
246
247 class MyLanguagePane(wx.Panel):
248 """
249 ...
250 """
251 def __init__(self, parent):
252 wx.Panel.__init__(self, parent,
253 style=wx.BORDER_THEME |
254 wx.TAB_TRAVERSAL)
255
256 #------------
257
258 labels = 'One Two Three Four Five Six Seven Eight Nine Ten Eleven Twelve Thirteen Fourteen Firteen'.split()
259
260 #------------
261
262 # Font, size and style.
263 font = self.GetFont().GetPointSize()
264 font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
265 font.SetWeight(wx.BOLD)
266
267 #------------
268
269 sizer = wx.BoxSizer(orient=wx.VERTICAL)
270 self.SetSizer(sizer)
271
272 #------------
273
274 sbox = wx.StaticBox(self, -1, " Language : ")
275 sbox.SetForegroundColour("#0068c6")
276 sbox.SetFont(font)
277
278 ssizer = wx.StaticBoxSizer(sbox, orient=wx.VERTICAL)
279 sizer.Add(ssizer, 1, wx.EXPAND | wx.ALL, 10)
280
281 #------------
282
283 spanel = scrolled.ScrolledPanel(self, -1)
284 ssizer.Add(spanel, 1, wx.EXPAND)
285
286 #------------
287
288 spsizer = wx.BoxSizer(wx.VERTICAL)
289 spanel.SetSizer(spsizer)
290 for label in labels:
291 self.btn = wx.Button(spanel,
292 label=label,
293 size=(-1,50))
294 spsizer.Add(self.btn, flag=wx.ALL, border=2)
295
296 self.Bind(wx.EVT_BUTTON, self.OnPass, self.btn)
297
298 #------------
299
300 spanel.SetupScrolling(scroll_x=False,
301 scroll_y=True,
302 rate_y=10,
303 scrollToTop=False)
304
305 #------------
306
307 sizer.Layout()
308
309 #-----------------------------------------------------------------------
310
311 def OnPass(self, event):
312 """
313 Just grouping the empty event handlers together.
314 """
315
316 print("Hello 4 !")
317
318 pass
319
320 #---------------------------------------------------------------------------
321
322 class MyControlPane(wx.Panel):
323 """
324 ...
325 """
326 def __init__(self, parent):
327 wx.Panel.__init__(self, parent)
328
329 #------------
330
331 # Font, size and style.
332 font = self.GetFont().GetPointSize()
333 font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
334 font.SetWeight(wx.BOLD)
335
336 #------------
337
338 statictxt = wx.StaticText(self, -1, "Category :")
339 statictxt.SetForegroundColour("#be3a3a")
340 statictxt.SetFont(font)
341
342 #------------
343
344 sampleList = ["General",
345 "User interface",
346 "Path",
347 "Language"]
348
349 combo = wx.ListBox(self,
350 -1,
351 (-1, -1),
352 (200, 1600),
353 sampleList,
354 style=wx.LB_ALWAYS_SB |
355 wx.LB_SINGLE)
356 combo.SetSelection(0)
357 combo.SetForegroundColour("white")
358 combo.SetBackgroundColour("gray")
359
360 #------------
361
362 sizer = wx.BoxSizer(wx.VERTICAL)
363 sizer.Add(statictxt, 0, wx.TOP, 7)
364 sizer.Add(combo, 1, wx.EXPAND | wx.TOP, 2)
365
366 border = wx.BoxSizer()
367 border.Add(sizer, 1, wx.EXPAND | wx.ALL, 9)
368 self.SetSizer(border)
369
370 #------------
371
372 # Simplified init method.
373 self.BindEvents()
374
375 #-----------------------------------------------------------------------
376
377 def BindEvents(self):
378 """
379 ...
380 """
381
382 self.Bind(wx.EVT_LISTBOX, self.OnExpandWindow)
383
384
385 def OnExpandWindow(self, event):
386 """
387 ...
388 """
389
390 self.GetParent().ExpandWindow(event.GetSelection())
391
392 #---------------------------------------------------------------------------
393
394 class MySplitterPanel(wx.Panel):
395 """
396 ...
397 """
398 def __init__(self, parent):
399 wx.Panel.__init__(self, parent, -1)
400
401 #------------
402
403 cp = MyControlPane(self)
404 splitter = FWS.FourWaySplitter(self)
405 self.splitter = splitter
406 self.splitter.SetExpanded(0)
407
408 #------------
409
410 sizer = wx.BoxSizer(wx.HORIZONTAL)
411
412 sizer.Add(cp)
413 sizer.Add(splitter, 1, wx.EXPAND | wx.ALL, 10)
414
415 self.SetSizer(sizer)
416
417 #------------
418
419 pane1 = MyGeneralPane(splitter)
420 splitter.AppendWindow(pane1)
421
422 pane2 = MyInterfacePane(splitter)
423 splitter.AppendWindow(pane2)
424
425 pane3 = MySourcePane(splitter)
426 splitter.AppendWindow(pane3)
427
428 pane4 = MyLanguagePane(splitter)
429 splitter.AppendWindow(pane4)
430
431 #-----------------------------------------------------------------------
432
433 def ExpandWindow(self, selection):
434 """
435 ...
436 """
437
438 self.splitter.SetExpanded(selection)
439
440 #---------------------------------------------------------------------------
441
442 class MySettingDialog(wx.Dialog):
443 """
444 ...
445 """
446 def __init__(self, parent, title,
447 pos=wx.DefaultPosition,
448 size=wx.DefaultSize):
449 wx.Dialog.__init__(self,
450 parent,
451 -1,
452 title,
453 pos=(-1, -1),
454 size=(640, 526),
455 style=wx.DEFAULT_FRAME_STYLE)
456
457 #------------
458
459 # Attributes.
460 self.parent = parent
461
462 #------------
463
464 # Simplified init method.
465 self.SetProperties()
466 self.CreateCtrls()
467 self.DoLayout()
468
469 #------------
470
471 self.CenterOnScreen(wx.BOTH)
472 print("\nDisplay the settings dialog")
473
474 #------------
475
476 self.ShowModal()
477 self.Destroy()
478
479 #-----------------------------------------------------------------------
480
481 def SetProperties(self):
482 """
483 ...
484 """
485
486 frameicon = wx.Icon("icon_wxWidgets.ico")
487 self.SetIcon(frameicon)
488
489 self.SetMinSize((640, 526))
490
491
492 def CreateCtrls(self):
493 """
494 ...
495 """
496
497 self.panel = MySplitterPanel(self)
498
499 self.btnSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL)
500
501
502 def DoLayout(self):
503 """
504 ...
505 """
506
507 mainSizer = wx.BoxSizer(wx.HORIZONTAL)
508 ctrlSizer = wx.BoxSizer(wx.VERTICAL)
509
510 ctrlSizer.Add(self.panel, 1, wx.EXPAND)
511 ctrlSizer.Add(self.btnSizer, 0, wx.EXPAND |
512 wx.RIGHT, 5)
513
514 mainSizer.Add(ctrlSizer, 1, wx.EXPAND |
515 wx.BOTTOM, 10)
516
517 self.SetSizer(mainSizer)
518 mainSizer.Layout()
519
520 #---------------------------------------------------------------------------
521
522 class MyFrame(wx.Frame):
523 """
524 ...
525 """
526 def __init__(self):
527 super(MyFrame, self).__init__(None,
528 -1,
529 title="")
530
531 #------------
532
533 # Return application name.
534 self.app_name = wx.GetApp().GetAppName()
535
536 #------------
537
538 # Simplified init method.
539 self.SetProperties()
540 self.CreateCtrls()
541 self.BindEvents()
542 self.DoLayout()
543
544 #------------
545
546 self.CenterOnScreen()
547
548 #-----------------------------------------------------------------------
549
550 def SetProperties(self):
551 """
552 ...
553 """
554
555 self.SetTitle(self.app_name)
556
557 #------------
558
559 frameicon = wx.Icon("icon_wxWidgets.ico")
560 self.SetIcon(frameicon)
561
562
563 def CreateCtrls(self):
564 """
565 ...
566 """
567
568 # Create a panel.
569 self.panel = wx.Panel(self, -1)
570
571 #------------
572
573 # Add some buttons.
574 self.btnDlg = wx.Button(self.panel,
575 -1,
576 "&Show settings dialog")
577
578 self.btnClose = wx.Button(self.panel,
579 -1,
580 "&Close")
581
582
583 def BindEvents(self):
584 """
585 Bind some events to an events handler.
586 """
587
588 # Bind the close event to an event handler.
589 self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
590
591 # Bind the buttons event to an event handler.
592 self.Bind(wx.EVT_BUTTON, self.OnSetting, self.btnDlg)
593 self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.btnClose)
594
595
596 def DoLayout(self):
597 """
598 ...
599 """
600
601 # MainSizer is the top-level one that manages everything.
602 mainSizer = wx.BoxSizer(wx.VERTICAL)
603
604 # wx.BoxSizer(window, proportion, flag, border)
605 # wx.BoxSizer(sizer, proportion, flag, border)
606 mainSizer.Add(self.btnDlg, 1, wx.EXPAND | wx.ALL, 10)
607 mainSizer.Add(self.btnClose, 1, wx.EXPAND | wx.ALL, 10)
608
609 # Finally, tell the panel to use the sizer for layout.
610 self.panel.SetAutoLayout(True)
611 self.panel.SetSizer(mainSizer)
612
613 mainSizer.Fit(self.panel)
614
615 #-----------------------------------------------------------------------
616
617 def OnCloseMe(self, event):
618 """
619 ...
620 """
621
622 self.Close(True)
623
624
625 def OnSetting(self, event):
626 """
627 ...
628 """
629
630 settingDlg = MySettingDialog(self,
631 title="Settings dialog")
632 #pos=(-1, -1),
633 #size=(500, 300))
634
635 def OnCloseWindow(self, event):
636 """
637 ...
638 """
639
640 self.Destroy()
641
642 #---------------------------------------------------------------------------
643
644 class MyApp(wx.App):
645 """
646 ...
647 """
648 def OnInit(self):
649
650 #------------
651
652 self.SetAppName("Main frame")
653
654 #------------
655
656 self.installDir = os.path.split(os.path.abspath(sys.argv[0]))[0]
657
658 #------------
659
660 frame = MyFrame()
661 self.SetTopWindow(frame)
662 frame.Show(True)
663
664 return True
665
666 #-----------------------------------------------------------------------
667
668 def GetInstallDir(self):
669 """
670 Returns the installation directory for my application.
671 """
672
673 return self.installDir
674
675 #---------------------------------------------------------------------------
676
677 def main():
678 app = MyApp(False)
679 app.MainLoop()
680
681 #---------------------------------------------------------------------------
682
683 if __name__ == "__main__" :
684 main()
Download source
Additional Information
Link :
https://wiki.wxpython.org/TitleIndex
Thanks to
Robin Dunn, Andrea Gavana...
About this page
Date Person (bot) Comments :
10/10/18 - Ecco (Created page for wxPython Phoenix).
Comments
- blah, blah, blah...