]>
Commit | Line | Data |
---|---|---|
1 | ||
2 | from wxPython.wx import * | |
3 | from wxPython.lib.anchors import LayoutAnchors | |
4 | ||
5 | #---------------------------------------------------------------------- | |
6 | ||
7 | ||
8 | [wxID_ANCHORSDEMOFRAMEANCHOREDPANEL, wxID_ANCHORSDEMOFRAMEHELPSTATICTEXT, | |
9 | wxID_ANCHORSDEMOFRAMEMAINPANEL, wxID_ANCHORSDEMOFRAMEBACKGROUNDPANEL, | |
10 | wxID_ANCHORSDEMOFRAMERIGHTCHECKBOX, wxID_ANCHORSDEMOFRAMEOKBUTTON, | |
11 | wxID_ANCHORSDEMOFRAMETOPCHECKBOX, wxID_ANCHORSDEMOFRAMEBOTTOMCHECKBOX, | |
12 | wxID_ANCHORSDEMOFRAME, wxID_ANCHORSDEMOFRAMELEFTCHECKBOX, | |
13 | ] = map(lambda _init_ctrls: wxNewId(), range(10)) | |
14 | ||
15 | class AnchorsDemoFrame(wxFrame): | |
16 | def _init_utils(self): | |
17 | pass | |
18 | ||
19 | def _init_ctrls(self, prnt): | |
20 | wxFrame.__init__(self, size = wxSize(328, 187), id = wxID_ANCHORSDEMOFRAME, title = 'LayoutAnchors Demonstration', parent = prnt, name = 'AnchorsDemoFrame', style = wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN, pos = wxPoint(261, 123)) | |
21 | self._init_utils() | |
22 | ||
23 | self.mainPanel = wxPanel(size = wxSize(320, 160), parent = self, id = wxID_ANCHORSDEMOFRAMEMAINPANEL, name = 'panel1', style = wxTAB_TRAVERSAL | wxCLIP_CHILDREN, pos = wxPoint(0, 0)) | |
24 | self.mainPanel.SetAutoLayout(True) | |
25 | ||
26 | self.okButton = wxButton(label = 'OK', id = wxID_ANCHORSDEMOFRAMEOKBUTTON, parent = self.mainPanel, name = 'okButton', size = wxSize(72, 24), style = 0, pos = wxPoint(240, 128)) | |
27 | self.okButton.SetConstraints(LayoutAnchors(self.okButton, False, False, True, True)) | |
28 | EVT_BUTTON(self.okButton, wxID_ANCHORSDEMOFRAMEOKBUTTON, self.OnOkButtonButton) | |
29 | ||
30 | self.backgroundPanel = wxPanel(size = wxSize(304, 80), parent = self.mainPanel, id = wxID_ANCHORSDEMOFRAMEBACKGROUNDPANEL, name = 'backgroundPanel', style = wxSIMPLE_BORDER | wxCLIP_CHILDREN, pos = wxPoint(8, 40)) | |
31 | self.backgroundPanel.SetBackgroundColour(wxColour(255, 255, 255)) | |
32 | self.backgroundPanel.SetConstraints(LayoutAnchors(self.backgroundPanel, True, True, True, True)) | |
33 | ||
34 | self.anchoredPanel = wxPanel(size = wxSize(88, 48), id = wxID_ANCHORSDEMOFRAMEANCHOREDPANEL, parent = self.backgroundPanel, name = 'anchoredPanel', style = wxSIMPLE_BORDER, pos = wxPoint(104, 16)) | |
35 | self.anchoredPanel.SetBackgroundColour(wxColour(0, 0, 222)) | |
36 | self.anchoredPanel.SetConstraints(LayoutAnchors(self.anchoredPanel, False, False, False, False)) | |
37 | ||
38 | self.leftCheckBox = wxCheckBox(label = 'Left', id = wxID_ANCHORSDEMOFRAMELEFTCHECKBOX, parent = self.mainPanel, name = 'leftCheckBox', size = wxSize(40, 16), style = 0, pos = wxPoint(8, 8)) | |
39 | self.leftCheckBox.SetConstraints(LayoutAnchors(self.leftCheckBox, False, True, False, False)) | |
40 | EVT_CHECKBOX(self.leftCheckBox, wxID_ANCHORSDEMOFRAMELEFTCHECKBOX, self.OnCheckboxCheckbox) | |
41 | ||
42 | self.topCheckBox = wxCheckBox(label = 'Top', id = wxID_ANCHORSDEMOFRAMETOPCHECKBOX, parent = self.mainPanel, name = 'topCheckBox', size = wxSize(40, 16), style = 0, pos = wxPoint(88, 8)) | |
43 | self.topCheckBox.SetConstraints(LayoutAnchors(self.topCheckBox, False, True, False, False)) | |
44 | EVT_CHECKBOX(self.topCheckBox, wxID_ANCHORSDEMOFRAMETOPCHECKBOX, self.OnCheckboxCheckbox) | |
45 | ||
46 | self.rightCheckBox = wxCheckBox(label = 'Right', id = wxID_ANCHORSDEMOFRAMERIGHTCHECKBOX, parent = self.mainPanel, name = 'rightCheckBox', size = wxSize(48, 16), style = 0, pos = wxPoint(168, 8)) | |
47 | self.rightCheckBox.SetConstraints(LayoutAnchors(self.rightCheckBox, False, True, False, False)) | |
48 | EVT_CHECKBOX(self.rightCheckBox, wxID_ANCHORSDEMOFRAMERIGHTCHECKBOX, self.OnCheckboxCheckbox) | |
49 | ||
50 | self.bottomCheckBox = wxCheckBox(label = 'Bottom', id = wxID_ANCHORSDEMOFRAMEBOTTOMCHECKBOX, parent = self.mainPanel, name = 'bottomCheckBox', size = wxSize(56, 16), style = 0, pos = wxPoint(248, 8)) | |
51 | self.bottomCheckBox.SetConstraints(LayoutAnchors(self.bottomCheckBox, False, True, False, False)) | |
52 | EVT_CHECKBOX(self.bottomCheckBox, wxID_ANCHORSDEMOFRAMEBOTTOMCHECKBOX, self.OnCheckboxCheckbox) | |
53 | ||
54 | self.helpStaticText = wxStaticText(label = 'Select anchor options above, then resize window to see the effect', id = wxID_ANCHORSDEMOFRAMEHELPSTATICTEXT, parent = self.mainPanel, name = 'helpStaticText', size = wxSize(224, 24), style = wxST_NO_AUTORESIZE, pos = wxPoint(8, 128)) | |
55 | self.helpStaticText.SetConstraints(LayoutAnchors(self.helpStaticText, True, False, True, True)) | |
56 | ||
57 | def __init__(self, parent): | |
58 | self._init_ctrls(parent) | |
59 | ||
60 | def OnCheckboxCheckbox(self, event): | |
61 | self.anchoredPanel.SetConstraints( | |
62 | LayoutAnchors(self.anchoredPanel, | |
63 | self.leftCheckBox.GetValue(), self.topCheckBox.GetValue(), | |
64 | self.rightCheckBox.GetValue(), self.bottomCheckBox.GetValue()) ) | |
65 | ||
66 | def OnOkButtonButton(self, event): | |
67 | self.Close() | |
68 | ||
69 | #---------------------------------------------------------------------- | |
70 | ||
71 | def runTest(frame, nb, log): | |
72 | win = AnchorsDemoFrame(frame) | |
73 | frame.otherWin = win | |
74 | win.Show(True) | |
75 | ||
76 | ||
77 | ||
78 | ||
79 | #---------------------------------------------------------------------- | |
80 | ||
81 | ||
82 | ||
83 | ||
84 | overview = """<html><body> | |
85 | <h2>LayoutAnchors</h2> | |
86 | A class that implements Delphi's Anchors with wxLayoutConstraints. | |
87 | <p> | |
88 | Anchored sides maintain the distance from the edge of the | |
89 | control to the same edge of the parent. | |
90 | When neither side is selected, the control keeps the same | |
91 | relative position to both sides. | |
92 | <p> | |
93 | The current position and size of the control and it's parent | |
94 | is used when setting up the constraints. To change the size or | |
95 | position of an already anchored control, set the constraints to | |
96 | None, reposition or resize and reapply the anchors. | |
97 | <p> | |
98 | Examples: | |
99 | <p> | |
100 | Let's anchor the right and bottom edge of a control and | |
101 | resize it's parent. | |
102 | <p> | |
103 | <pre> | |
104 | ctrl.SetConstraints(LayoutAnchors(ctrl, left=0, top=0, right=1, bottom=1)) | |
105 | ||
106 | +=========+ +===================+ | |
107 | | +-----+ | | | | |
108 | | | * | -> | | | |
109 | | +--*--+ | | +-----+ | | |
110 | +---------+ | | * | | |
111 | | +--*--+ | | |
112 | +-------------------+ | |
113 | * = anchored edge | |
114 | </pre> | |
115 | <p> | |
116 | When anchored on both sides the control will stretch horizontally. | |
117 | <p> | |
118 | <pre> | |
119 | ctrl.SetConstraints(LayoutAnchors(ctrl, 1, 0, 1, 1)) | |
120 | ||
121 | +=========+ +===================+ | |
122 | | +-----+ | | | | |
123 | | * * | -> | | | |
124 | | +--*--+ | | +---------------+ | | |
125 | +---------+ | * ctrl * | | |
126 | | +-------*-------+ | | |
127 | +-------------------+ | |
128 | * = anchored edge | |
129 | </pre> | |
130 | </html></body> | |
131 | """ | |
132 | ||
133 | ||
134 | ||
135 | ||
136 | ||
137 | ||
138 | ||
139 | if __name__ == '__main__': | |
140 | import sys,os | |
141 | import run | |
142 | run.main(['', os.path.basename(sys.argv[0])]) | |
143 |