рд╣реЗрд▓реЛ рд╣рднрдм!
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐
wxPython рдЬреИрд╕реА рдЕрджреНрднреБрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд, рд░реВрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди, рдкреНрд░рдкрддреНрд░ рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдВрддреНрд░рдг рдФрд░ wxPython рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдм рдХреБрдЫ рдорд┐рд▓реЗрдЧрд╛ред
WxPython рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ ред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛
рдХреБрдЫ рд╕рд┐рджреНрдзрд╛рдВрдд-рдкрд░рд┐рдЪрдпред
1.
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ wxPython (рд░реВрд╕реА) - рдкреБрд╕реНрддрдХ рдХрд╛ рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг (рдореИрдВ рдЗрд╕рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдореВрд▓ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ wxPython (рдЕрдВрдЧреНрд░реЗрдЬреА) рд╣реИ) - рдпрд╣рд╛рдВ рдпрд╣ рдХрд╛рдЧрдЬ рдХреЗ рд░реВрдк рдореЗрдВ $ 54 (рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ) рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдкрд╛ рд▓реЗрдВрдЧреЗред) рдЖрдо рд░рд╛рдп рдпрд╣ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИред рд╕рдм рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрдИ рдмрд┐рдВрджреБ рд╡рд┐рд╕реНрддреГрдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА
рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджреЗрдЦреА рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╕рд╣реА рд╣реИрдВ, рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ред
2.wxPython 2.8 рдПрдкреНрд▓реАрдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреБрдХрдмреБрдХ ред рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХ рдХреЛ рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдирд╣реАрдВ рдХреА, рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкреБрд╕реНрддрдХ рдореЗрдВ GUI рдлрд╝реЙрд░реНрдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП "рд░реЗрд╕рд┐рдкреА" рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдХрд┐рддрд╛рдм рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢реЗрдВ рд╣реИрдВред рдкрдврд╝рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред
3.
python.su рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рдЕрдЪреНрдЫреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдордВрдЪ рд╣реИред рдЗрд╕реЗ рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рди рдорд╛рдиреЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ рдЕрдлрд╝рд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
4.
habrahabr.ru - рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдлрд┐рдЬрд┐рдпреЛ рдиреЗ рдореЗрд░рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ред рдЙрд╕ рдХреНрд╖рдг рдЬрдм рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдПрдХ рднреА рд▓реЗрдЦ рдирд╣реАрдВ рдерд╛ред рдЕрднреА рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдореВрд▓ рдмрд╛рддреЗрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд▓реЗрдЦ рдлреНрд▓реИрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬреЛ рдкрд╣рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдкреБрд╕реНрддрдХ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ)ред рджрд░рдЕрд╕рд▓, рддрдм рднреА рдореБрдЭреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рддреБрд░рдВрдд рдХрдИ рд╕рд╛рдзрдиреЛрдВ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдорд┐рд▓рд╛ рдерд╛ред
1.wxPythom рдбреЗрдореЛ рдФрд░ рдбреЙрдХреНрд╕ ред рдпрд╣ рдХрд┐рд╕реА рднреА рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рд░реВрдкреЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ wxpython рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд░реВрдкреЛрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ, рд╕реВрдЪрд┐рдпреЛрдВ, рдкреЗрдбрд╝реЛрдВ рдФрд░ рдЙрдирдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓реЗрдВрдЧреЗред рдЗрди рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдореГрджреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдФрд░ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдкрд╛рдпрд╛, рдЬрдм рдореИрдВрдиреЗ рд╕рдордЭрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛ рд╣реБрдИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ред
2.
wxFormBuilder - wxPython (рдФрд░ рди рдХреЗрд╡рд▓) рдХреЗ рд▓рд┐рдП рд░реВрдкреЛрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ-рдирд┐рд░реНрдорд╛рддрд╛ред рдореБрдЭреЗ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдм рдорд┐рд▓рд╛ рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд▓рдЧрднрдЧ 30 рдлреЙрд░реНрдо рд▓рд┐рдЦреЗред рдпрд╛рдиреА рд╕рдм рдХреБрдЫ рд╣рд╛рдереЛрдВ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдлреЙрд░реНрдо рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд▓реЗрдХрд░, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реЙрдЬрд╝рд░ рдФрд░ рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рддрдХред рддрдм рдореИрдВ рд╕рд┐рд░реНрдл рд╕рдордп рдмрдЪрд╛ рд╕рдХрддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдФрд░ рдХрд╣рд╛рдВ, рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВред рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╛рд╕ рд╕рдВрдкреВрд░реНрдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, wx рдПрдХ рдЬрдЯрд┐рд▓ рдФрд░ рдмрд╣реБрдд рд╣реА рдЪрдордХрджрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдкреВрд░реНрдг рд▓реЗрдЦрди рдореЗрдВ рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреЙрд░реНрдо рднрд░рдирд╛ рдФрд░ рдмрдирд╛рдирд╛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рдЖрдк рдкреВрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ 30% рдирд╣реАрдВ рдкрдХрдбрд╝ рдкрд╛рдПрдВрдЧреЗ рдФрд░ рдЖрдкрдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддреАрди рдмрдЯрди рдФрд░ рджреЛ рдШрдЯрдирд╛рдУрдВ рддрдХ рд╕реАрдорд┐рдд рд░рд╣реЗрдЧрд╛ред
рдкрд░рд┐рдЪрдп
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реАрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
1. рд╕рднреА рдЖрдЗрдЯрдо рд╕рд┐рдЬрд╝рд░ рдореЗрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред Sizer (
wx.Sizer ) рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрджреГрд╢реНрдп рд░реВрдк рддрддреНрд╡ рд╣реИ рдЬреЛ рдлреЙрд░реНрдо рдХреЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
2. рдкрджрд╛рдиреБрдХреНрд░рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдкреНрд░рдкрддреНрд░ (
wx.Frame ) рдкрд░ рдПрдХ
sizer рд╣реИ, рдПрдХ рдХрдВрдЯреЗрдирд░ рдкреИрдирд▓ (
wx.Panel ) sizer рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдФрд░ sizer рдкреИрдирд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рднреА рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ sizer рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдП рдЧрдП рд╣реИрдВред
3. рдкреИрдирд▓ рдореЗрдВ рдПрдХ рдШрдЯрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЧрд▓рдд рд╣реИ (рдФрд░ wxFormBuilder рдЖрдкрдХреЛ рдРрд╕рд╛
рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ )ред
4. рд╕рднреА рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рдЧреБрдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП, рдпрджрд┐ рдкрд╛рда рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЖрдХрд╛рд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореВрд▓ рддрддреНрд╡
Wx рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рд╣реИрдВ:
wx.Dialog - рдПрдХ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ред
wx.Frame - рдорд╛рдирдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рдиреНрдпреВрдирддрдо (
wx.ICONIZE ) рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк, рдЕрдзрд┐рдХрддрдо (
wx.MAXIMIZE ), рдХрд░реАрдм (
wx.Close ))ред
рдХреЛрдб рдореЗрдВ wx.Frame рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡:
wx.Frame.__init__ ( self, parent=None, id = wx.ID_ANY, title = u"NameWindow", pos = wx.DefaultPosition, size = wx.Size( int,int ), style = wx.CAPTION )
рдХреЛрдб рдХреА рдпрд╣ рд▓рд╛рдЗрди рдлреЙрд░реНрдо рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреА рд╣реИ рдФрд░ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдбреНрд░рд╛ рдХрд░рддреА рд╣реИред рд╡реИрд╕реЗ:
wx.Frame.__init__ (self, parent = None)
рд╡рд╣ рдПрдХ рдлреЙрд░реНрдо рднреА рдирд┐рдХрд╛рд▓реЗрдЧрд╛, рдФрд░ рдлреЙрд░реНрдо рдХреЗ рд╕рднреА рдЧреБрдг рдорд╛рдирдХ рд╣реЛрдВрдЧреЗред
рд╕реНрд╡рдпрдВ рдФрд░
рдорд╛рддрд╛ -
рдкрд┐рддрд╛ рдХрд┐рд╕реА рднреА рд░реВрдк рдХреЗ рджреЛ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред
рдЖрдЗрдП рдлреЙрд░реНрдо рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:
рдЖрддреНрдо рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИ;
рдорд╛рддрд╛ -рдкрд┐рддрд╛ рдЗрд╕ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдорд╛рддрд╛-
рдкрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИред
рдЖрдИрдбреА - рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡, рд╡рд┐рдВрдбреЛ рдореЗрдВ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░рд┐рдпрд╛, рдШрдЯрдирд╛ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдпрд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдЖрдИрдбреА рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ -1 рдпрд╛
wx.ID_ANY рд╕реЗрдЯ рдХрд░
рд╕рдХрддреЗ рд╣реИрдВ - рдЬреЛ рдХрд┐рд╕реА рднреА рдЖрдИрдбреА рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ
рдмрдирд╛рддрд╛ рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдЕрдкрдиреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрд▓ рдХрд░рдиреЗ рдпрд╛ рддрддреНрд╡ рдХреЛ рдХрд╛рд░реНрдп рд╕реМрдВрдкрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; wx.ID_ANY рдорд╛рди, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ -1 рд╣реИред)
рд╢реАрд░реНрд╖рдХ - рд╡рд┐рдВрдбреЛ рдХрд╛ рд╢реАрд░реНрд╖рдХ,
рдкреЙрдЬрд╝ - x рдФрд░ y рдкрд░ рдлрд╝реЙрд░реНрдо рдХрд╛ рд╕реНрдерд╛рди рд╕реНрдХреНрд░реАрди рдкрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ,
рдЖрдХрд╛рд░ - рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдлрд╝реЙрд░реНрдо рдХрд╛ рдЖрдХрд╛рд░,
рд╢реИрд▓реА - рд╡рд┐рдВрдбреЛ рд╢реИрд▓реАред рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдХреБрдЫ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ:
wx.CAPTION - рд╢реАрд░реНрд╖ рдмрд╛рд░ рдХреЛ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо рдореЗрдиреВ рдХреЗ рдмрд┐рдирд╛;
wx.STAY_ON_TOP - рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рд╣реЗрдВ, рдореИрдВ рдПрдХ рд╡рд┐рд╡рд░рдг рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдпрджрд┐ рдХрдИ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рд╢реИрд▓реА рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рдореЗрдВ рдореВрд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЙрдЪреНрдЪрддрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЦрд┐рдбрд╝рдХреА "рд╢реАрд░реНрд╖" рдкрд░ рд░рд╣реЗрдЧреА;
wx.SYSTEM_MENU - рд╢реАрд░реНрд╖ рдкрдЯреНрдЯреА рдкрд░ "рдХреНрд▓реЛрдЬрд╝" рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ;
рд╕рдВрд╡рд╛рдж рдФрд░
рдлреНрд░реЗрдо рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
1. рдбрд╛рдпрд▓реЙрдЧ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ, рдЕрд░реНрдерд╛рдд рдЬрдм рддрдХ рдЖрдк рдЗрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛ рд╕рдХреЗрдЧрд╛
рдпрд╣ рдЖрд╡реЗрджрдиред
2. рдбрд╛рдпрд▓реЙрдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреИрдирд▓ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ sizer рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ sizer рдкрд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
3. рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдмрдЯрди рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ рдмрд╛рдж рдореЗрдВ)ред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреА рдкреНрд░рдЪреБрд░рддрд╛ рдЕрджреНрднреБрдд рд╣реИред рдЗрд╕рдореЗрдВ рдмрдЯрди рд╕реЗ рд▓реЗрдХрд░ рдиреЛрдЯрдмреБрдХ рддрдХ рдЯреИрдм рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╣реИ (рдЗрдирдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ)ред
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдмреЗрдХрд╛рд░ рд╣реИ, рдпрд╣ рдХрдИ рдорд╣реАрдиреЛрдВ рддрдХ рдЪрд▓реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд▓рдЧрднрдЧ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдФрд░ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдХреНрд╖рдгреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реБрдП, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрдИ рддрддреНрд╡реЛрдВ рдкрд░ рдЬрд╛рдПрдВрдЧреЗред
рд╕рд░рд▓рддрдо рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
class regexps ( wx.Frame ): def __init__( self, main, schema, table, connection ): wx.Frame.__init__ ( self, parent=None, id = wx.ID_ANY, title = u"Data Quality -- ", pos = wx.DefaultPosition, size = wx.Size( 510,477 ), style = wx.CAPTION|wx.STAY_ON_TOP|wx.TAB_TRAVERSAL ) sizer1 = wx.BoxSizer( wx.HORIZONTAL ) self.regexps_notebook = wx.Notebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 ) self.dq_params_tab = wx.Panel( self.regexps_notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдВрдбреЛ рдХреА рдкреНрд░рд╛рд░рдВрдн
wx.Frame , рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА рдЧреБрдг рдореМрдЬреВрдж рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдорд╛рдирдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рджрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рд╣рдореЗрдВ рд╢реАрд░реНрд╖ рдкрдЯреНрдЯреА рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдиреВ рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреНрд▓реЛрдЬ рдмрдЯрди рдХреЗ рд░реВрдк рдореЗрдВред рд╕рд╛рде рд╣реА, рд╡рд┐рдВрдбреЛ рд╣рдореЗрд╢рд╛ рд╕рдХреНрд░рд┐рдп
рд░рд╣реЗрдЧреА (
wx.STAY_ON_TOP )ред Sizer рдШреЛрд╖рдгрд╛ред Sizer рдкреНрд░рдХрд╛рд░ wx.BoxSizer рдПрдХ рдмреЙрдХреНрд╕ рд╣реИред рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рдпрд╛ рд▓рдВрдмрд╡рдд (рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рддрд░реНрдХ рдЗрд╕ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
wx.HORIZONTAL )ред рдиреЛрдЯрдмреБрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди (рдЯреИрдмреНрдб рдкреИрдирд▓)ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрд╕реЗ рдПрдХ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
self.regexps_notebook , рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдмрдирд╛ рд╕рдХреЗрдВред рдЕрдЧрд▓рд╛ рдЧреБрдг рдХреЗ рд╕рд╛рде
wx.Notebook рдШрдЯрдХ рдХреА рдШреЛрд╖рдгрд╛ рд╣реИред рд▓реИрдкрдЯреЙрдк рдкрд░ рдлрд┐рдЯ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдирд▓ рдХреА рдПрдХ рдШреЛрд╖рдгрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓реИрдкрдЯреЙрдк рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рдкреИрдирд▓ рд╕рднреА рдЯреИрдм рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреИрдирд▓ рдХреЛ рдПрдХ рд▓реИрдкрдЯреЙрдк рдЯреИрдм рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рд┐рдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ (рдпрд╣ рдЗрд╕ рддрдереНрдп рдХрд╛ рдЦрдВрдбрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рддрддреНрд╡ sizers рдореЗрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рдпрд╣ рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдЕрдкрд╡рд╛рдж рд╣реИ)
sizer2 = wx.BoxSizer( wx.VERTICAL ) self.use_param_checkbox = wx.CheckBox( self.dq_params_tab, wx.ID_ANY, u" ", wx.DefaultPosition, wx.DefaultSize, 0 )
рджреВрд╕рд░реЗ рд╕рд┐рд╕реНрдЯрд░ рдХреА рдШреЛрд╖рдгрд╛ред Sizer рдХрд╛ рдиреНрдпреВрдирддрдо рдЖрдХрд╛рд░ред рдПрдХ рдирдпрд╛ рдЪреЗрдХрдмреЙрдХреНрд╕ рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕реЗ
self.dq_params_tab рдкреИрдирд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЕрд░реНрдерд╛рдд рд▓реИрдкрдЯреЙрдк рдЯреИрдм рдкрд░ред
sizer2.Add( self.use_param_checkbox, 0, wx.ALL, 5 ) self.params_quality_choices = [1,2,3,4,5,6,7,8,9,10] self.params_choice_pull = wx.Choice( self.dq_params_tab, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, self.params_quality_choices, 0 )
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБред Sizer рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░, рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдкреИрдирд▓ (рдЯреИрдм) рдкрд░ рд╣реИред рдкрд░рд┐рд╡рд░реНрдзрди рдХреА рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
sizer2 - рдирд┐рд░реНрдорд┐рдд sizer, рдЬреЛрдбрд╝реЗрдВ - рд╣рдо рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░
Add рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ: рдХреНрдпрд╛ рдЬреЛрдбрд╝реЗрдВ (
self.use_param_checkbox ,
wx.ALL - рдпрд╣ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрд▓рдореЗрдирд╕реЗрдЯ рдХреЛ рдкреВрд░реНрдг рдЖрдХрд╛рд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛,
0 (рдпрд╣ рддрддреНрд╡ рдХрд╛ рдЖрдиреБрдкрд╛рддрд┐рдХрддрд╛ рд╣реИ рдФрд░
5 (рдпрд╣ рддрддреНрд╡ рдХреА
рд╕реАрдорд╛ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ) рдЕрдЧрд▓рд╛ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдХреА рдШреЛрд╖рдгрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
.params_quality_choices рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдЕрдЧрд▓рд╛,
wx.Choice рддрддреНрд╡
рд╣реИред) рдЬреЛ рднреА omeschaetsya рдЯреИрдмред
sizer2.Add( self.static_line, 0, wx.EXPAND |wx.ALL, 5 ) self.static_text = wx.StaticText( self.dq_params_tab, wx.ID_ANY, u" ", wx.DefaultPosition, wx.DefaultSize, 0 ) sizer2.Add( self.static_text, 0, wx.ALL, 5 ) self.weights_txt = wx.TextCtrl( self.dq_params_tab, validator = WeightsValidator() ) sizer2.Add( self.weights_txt, 0, wx.ALL, 5 )
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рд╣реИред
wx.EXPAND - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬреЛрдбрд╝реЗ рдЧрдП рддрддреНрд╡ рдХреЛ рдЙрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Wx.TextCtrl рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдирд╛ред рдпрд╣рд╛рдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд
рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╡рд┐рдХрд▓реНрдк
рд╣реИ ред рдЗрд╕ рдкрд░ рдПрдХ рдЕрдиреНрдп рдХреЛрдб рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
self.dq_params_tab.SetSizer( sizer2 ) self.dq_params_tab.Layout() sizer2.Fit( self.dq_params_tab )
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдкрд░ рдЖрдпрд╛ред Sizer (
sizer2 ) рдореЗрдВ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЛ рдкреИрдирд▓ (
self.dq_params_tab ) рдкрд░ рд╣реИ, рдкреИрдирд▓ рдХреЗ рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ sizer рдХреЛ "рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд" рдХрд░рдирд╛ рдФрд░ рдкреИрдирд▓ рдкрд░ sizer рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
regexps_listboxChoices = [] self.regexps_listbox = wx.ListBox( self.regexps_tab, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, regexps_listboxChoices, wx.LB_HSCROLL|wx.LB_SINGLE )
рдПрдХ рд╕реВрдЪреА
рдмреЙрдХреНрд╕ (
wx.ListBox ) рдЬреЛрдбрд╝рдирд╛ред рд╡рд┐рдХрд▓реНрдк
wx.LB_HSCROLL |
wx.LB_SINGLE рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреНрд░реЙрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЧреНрд░рд┐рдб рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрдЧреЗ рд╕рдм рдХреБрдЫ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓рд╛рдЗрдиреЗрдВ рд▓рдВрдмреА рд╣реИрдВред рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╡рд╛рдХреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред
рд╕рдорд╛рди рдирд┐рд░реНрдорд╛рдг рдФрд░ рддрддреНрд╡реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛрдб рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдкреВрд░реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ (рдпрджрд┐ рдХреЛрдИ рдкреВрд░реНрдг рдХреЛрдб рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рддреЛ рд▓рд┐рдЦреЗрдВ):

рдкрд╣рд▓рд╛ рдЯреИрдм

рджреВрд╕рд░рд╛ рдЯреИрдм

рддреАрд╕рд░рд╛ рдЯреИрдмред
рднрд╡рди рдирд┐рдпрдВрддреНрд░рдг рд╕реВрдЪреА
рдХреБрдЫ рд╕рд░рд▓ рддрддреНрд╡реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЪреАрдЬреЛрдВ рдХреА рдУрд░ рдмрдврд╝реЗрдВрдЧреЗред
рдирд┐рдпрдВрддреНрд░рдг рдкрддреНрд░ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрддреНрд╡ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рд░ рджреЗрдЦрддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреНрд░реЛрд▓ рд╢реАрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
class main_stat(listmix.ColumnSorterMixin): def __init__( self, rows, columns ): data = [] self.columns = columns self.rows = rows self.list = wx.ListCtrl(self.main.panelMainStat, 0, style=wx.LC_REPORT | wx.BORDER_NONE | wx.LC_EDIT_LABELS | wx.LC_SORT_ASCENDING | wx.LC_SINGLE_SEL)
рдХрдХреНрд╖рд╛ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдбреЗрдЯрд╛ рдореЗрдВ рд╕реНрддрдВрднреЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╕реВрдЪреА '
рд▓рд┐рд╕реНрдЯ ' рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж рд▓реАрдл рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕рдмрд╕реЗ рдЧреБрдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред
рд╣рдо рдЗрд╕рдореЗрдВ рдХреЙрд▓рдо (
рдХреЙрд▓рдо ) рдФрд░ рд░реЛ (
рдкрдВрдХреНрддрд┐рдпреЛрдВ ) рдХрд╛ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВред рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдХреА рд▓рдВрдмрд╛рдИ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред Listcontrol
self.list рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЧреБрдгреЛрдВ рдХреЛ
рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ ред
рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
wx.LC_REPORT рд╢реИрд▓реА - рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрддрдВрдн рдирд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрддреНрддреА рдирд┐рдпрдВрддреНрд░рдг, рд╕реНрддрдВрдн рдХреЗ рдиреАрдЪреЗ рд╕рднреА рдбреЗрдЯрд╛, рдЬреИрд╕реЗ рддрд╛рд▓рд┐рдХрд╛, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╛рдирддрд╛ред рдЗрд╕рд▓рд┐рдП рдмрд╛рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
for col, text in enumerate(self.columns): self.list.InsertColumn(col, text) for item in rows: info = '%s:(%s)' % (col, item) data.append(info) index = self.list.InsertStringItem(sys.maxint, item[0]) for col, text in enumerate(item[1:]): self.list.SetStringItem(index, col+1, text)
рдЕрдЧрд▓рд╛, рдереЛрдбрд╝рд╛ рдЪрд╛рд▓рд╛рдХ рдбреЗрдЯрд╛ рдкреАрдврд╝реА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред рдЗрд╕рдХрд╛ wx рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ред рд▓реЗрдХрд┐рди рдмрд╛рдд рдпрд╣ рд╣реИ
рдирд┐рдпрдВрддреНрд░рдг рдкрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдкрдВрдХреНрддрд┐рдпреЛрдВ = {1 :( "data0", "data0.1", "data0.2"), 2 :( "data1", "data1.0", "data1.1", "data1.2"), ... }рдЙрдкрд░реЛрдХреНрдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдлреЙрд░реНрдо рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рд▓рд╛рддрд╛ рд╣реИред
self.list.SetSize((900, 200)) self.list.SetColumnWidth(0, 120) self.list.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick, self.list) self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick) self.list.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected) self.itemDataMap = data listmix.ColumnSorterMixin.__init__(self, 3)
рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рд╢реАрдЯ рдХрд╛ рдЖрдХрд╛рд░, рд╕реНрддрдВрдн рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ рдШрдЯрдирд╛ рдмрд┐рдВрджрд┐рдо (рдЗрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЕрдзрд┐рдХ) рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдлреА рдХреЛрдб рдХрд╛ рдПрдХ рдХрд╛рдо рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
self.itemDataMap рджрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд▓рд╣рд╛рд▓ рдбреЗрдЯрд╛ рдХреЛ рдмрд┐рдирд╛ рдЫрд╛рдВрдЯреЗ рдмрд┐рдирд╛ рд╕реВрдЪреА рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
def getColumnText(self, index, col): item = self.list.GetItem(index, col) return item.GetText() def OnRightClick(self, event): index = self.list.GetFirstSelected() print index def OnColClick(self, event): print ("OnColClick: %d\n" % event.GetColumn()) event.Skip() def OnItemSelected(self, event): self.currentItem = event.m_itemIndex self.data = (self.getColumnText(self.currentItem, 1), self.getColumnText(self.currentItem, 2), self.getColumnText(self.currentItem, 3), self.getColumnText(self.currentItem, 4))( True )
рдбреЗрдЯрд╛ рд╡рд╛рд▓реА рд▓рд╛рдЗрди рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣рдореЗрдВ рдЗрд╕ рд▓рд╛рдЗрди рдХрд╛ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
OnColClick рд╡рд┐рдзрд┐ рд╣рдореЗрдВ рдХреЙрд▓рдо рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рджреЗрдЧреАред рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдПрдХ рдЪрд░ рдореЗрдВ рд╣реИрдВ
self.data рдПрдХ рд╕реВрдЪреА рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреА рдЬрд╛рдПрдЧреА рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЪреБрдирд╛ рдерд╛ (рдмрд╕ рдпрд╣рд╛рдВ,
getColumnText рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рд╕реЗ рдбреЗрдЯрд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред

рдирд┐рд░реНрдорд┐рдд рдкрддреНрддреА рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рдореЗрдиреНрдпреВ
рдЕрдм, рдХрд┐рд╕реА рднреА рдЖрд╡реЗрджрди рдХреЗ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ - рдореЗрдиреВред
self.menubar = wx.MenuBar( 0 ) self.BD = wx.Menu() self.m_menuItem1 = wx.MenuItem( self.BD, 1, u" ", u' ', wx.ITEM_NORMAL ) self.BD.AppendItem(self.m_menuItem1, ) self.m_menuItem2 = wx.MenuItem( self.BD, 2, u" \tCtrl+T", u' ', wx.ITEM_NORMAL ) self.BD.AppendItem( self.m_menuItem2 ) self.m_menuItem3 = wx.MenuItem( self.BD, 3, u" \tCtrl+Q", u' ', wx.ITEM_NORMAL ) self.BD.AppendItem( self.m_menuItem3 )
рдореЗрдиреВрдмрд╛рд░ рд╡рд┐рдЬреНрдЮрд╛рдкрдиред рдореЗрдиреВ рдмрд╛рд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдк рд╣реИ рдЬрд╣рд╛рдВ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╡рд╛рд▓реЗ рд╕рднреА рдореЗрдиреВ рдЖрдЗрдЯрдо рд╕реНрдерд┐рдд рд╣реИрдВред
self.BD = wx.Menu () - рдПрдХ рдореЗрдиреВ рдЖрдЗрдЯрдо рдмрдирд╛рдПрдВ, рдлрд┐рд░ рдЬреЛрдбрд╝реЗрдВ
рдореЗрдиреВ рдЖрдЗрдЯрдо
рд╕реНрд╡рдпрдВ рдореЗрдВред
рдмреАрдбреАред рдЖрдЗрдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:
self.m_menuItem1 = wx.MenuItem( self.BD, 1, u" ", u' ', wx.ITEM_NORMAL )
wx.MenuItem (
рдХрд┐рд╕ рдореЗрдиреВ рдореЗрдВ рд╣рдо рдореЗрдиреВ рдЖрдЗрдЯрдо, рдЖрдИрдбреА, рдирд╛рдо \ рд╣реЙрдЯрдХреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╕реНрдЯреЗрдЯрд╕ рдмрд╛рд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЗрд▓реНрдк рдЯреЗрдХреНрд╕реНрдЯ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ), рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдкреНрд░рдХрд╛рд░ )
рдирд╛рдо рдХреЗ рдмрд╛рдж, рд╣реЙрдЯрдХреА рдХреЗ рдмрд╛рдж
\ t (рдЯреИрдм рдХреИрд░реЗрдХреНрдЯрд░) рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЛ рдПрдХреНрдЯрд┐рд╡ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдкреНрд░рдХрд╛рд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
wx.ITEM_RADIO - рд░реЗрдбрд┐рдпреЛ рдмрдЯрди рдХреЗ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо,
wx.ITEM_CHECK - рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ,
рдЕрдЧрд▓рд╛, рд╣рдо рдЙрд╕реА рддрд░рд╣ рдХрдИ рдореЗрдиреВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
self.statusbar = self.CreateStatusBar( 1, wx.ST_SIZEGRIP, wx.ID_ANY ) self.BD.Enable(2, False) self.statusbar.SetStatusText(u' , , .')
рдПрдХ рд╕реНрдерд┐рддрд┐ рд░реЗрдЦрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рдФрд░ рд╣рдо рдореЗрдиреВ рдЖрдЗрдЯрдо рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рдЪреНрдЪрд╛ рддрд░реНрдХ рдЗрд╕реЗ рд╕рдХреНрд░рд┐рдп рдмрдирд╛ рджреЗрдЧрд╛ред рд╣рдо рдХреНрд▓рд╛рд╕ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдкрд░ рддреБрд░рдВрдд рд╕реНрдЯреЗрдЯрд╕ рдмрд╛рд░ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдФрд░ рдпрд╣рд╛рдБ рдореЗрдиреВ рд╣реИред
рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдкрд░реНрдпрд╛рд╡рд░рдг
рдХреЛрдИ рднреА рддрддреНрд╡, рдХреЛрдИ рднреА рд░реВрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред WxPython рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкреВрд░реНрдг рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рди рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдмрд▓реНрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рднреАред
рдЖрдЗрдП рдШрдЯрдирд╛рдУрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдЯрди рд╣реИ:
self.ok_btn = wx.Button( self.m_panel5, wx.ID_ANY, u"OK", wx.DefaultPosition, wx.DefaultSize, 0 )
рдФрд░ рд╣рдо рдмрдЯрди рджрдмрд╛рдХрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо 2 + 2 рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
self.ok_btn.Bind( wx.EVT_BUTTON, self.OnOk )
рдУрдиреЛрдХ рд╡рд┐рдзрд┐ рдПрдХ рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧреАред рджрд░рдЕрд╕рд▓ рдпрд╣ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ рд╣реИред рдЕрдВрддрд░ рдХреЗрд╡рд▓ wx.EVT_BUTTON рдореЗрдВ рд╣реИрдВ (рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ) рдФрд░ рд╡рд╣ рддрддреНрд╡ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ self.ok_btn рдмрдЯрди рд╣реИред
рдЗрд╡реЗрдВрдЯ рдирдВрдмрд░ 1 рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдиреВ рдЖрдЗрдЯрдо рджрдмрд╛рдХрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╡реЗрдВрдЯ рдирдВрдмрд░ 2 рдЬрдм рдПрдХ рдлреЙрд░реНрдо рдирд┐рд╖реНрдХреНрд░рд┐рдп (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛) рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рдорд╛рдгрдХреЛрдВ
рдХрд┐рд╕реА рднреА рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, wx
рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ - рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдЪреЗрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡реЗ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЪреЗрдХ рдирд╣реАрдВ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
class Numbers(wx.PyValidator): def __init__(self): wx.PyValidator.__init__(self) self.Bind(wx.EVT_CHAR, self.OnChar) def Clone(self): return Numbers() def Validate(self, win): tc = self.GetWindow() val = tc.GetValue() for x in val: if x not in string.digits: return False return True def OnChar(self, event): key = event.GetKeyCode() try:
рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╣рдо
wx.PyValidator рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╣реИред
OnChar рд╡рд┐рдзрд┐
рдХрд╛ рд╡рд░реНрдгрди
self.Bind рдЗрд╡реЗрдВрдЯ
(wx.EVT_CHAR, self.OnChar) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдХреАрдмреЛрд░реНрдб рд╕реЗ рд╡рд░реНрдг рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХреБрдВрдЬреА = event.GetKeyCode () рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
chr () рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреБрдВрдЬреА рдХреЛ рджрдмрд╛рдП рдЧрдП рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред
string.digits рдореЗрдВ 0 рд╕реЗ 9 рддрдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдореЗрдВ рднреА рд▓рдЧрднрдЧ рд╕рднреА рд╡рд░реНрдг рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреАрдмреЛрд░реНрдб рд╕реЗ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ,
рд╣реЗрдХреНрд╕рдбрд┐рдЯрд┐рдЬ рддрдХ (рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢
ascii рд╡рд░реНрдг рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░реВрд╕реА рднрд╛рд╖рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ )ред
рдорд╛рдиреНрдп рд╡рд┐рдзрд┐
tc = self.GetWindow () рдЙрд╕ рд╡рд┐рдВрдбреЛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рд╕реНрдерд┐рдд рд╣реИ, рджрд░реНрдЬ рдореВрд▓реНрдп рдХреЛ
рд╡реИрд▓ рдХрд░реЗрдВ , рдлрд┐рд░ рд╕рддреНрдпрд╛рдкрди рдЪрдХреНрд░ред рдпрд╣ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрдЦреНрдпрд╛, рдЕрд╡рдзрд┐ рдФрд░ рдмреИрдХрд╕реНрдкреЗрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдПрдХ рдХреБрдВрдЬреА рдХреЛ рджрдмрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдмреИрдХрд╕реНрдкреЗрд╕ рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, wx рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП wx.WXK_Numpad0, рд▓реЗрдХрд┐рди рдмреИрдХрд╕реНрдкреЗрд╕ рдирд╣реАрдВ рд╣реИ, F1 рд╕реЗ рд▓реЗрдХрд░ рдиреНрдпреВрдХреНрд▓реЙрдХ рддрдХ рд╕рдм рдХреБрдЫ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкреНрд░рдореБрдЦ рдорд╛рдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЙрд╕ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред
self.ip_ctrl = wx.TextCtrl( self.m_panel5, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 190,-1 ), 0, Numbers() )
рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд▓реЗрдЦ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдФрд░ рдереЛрдбрд╝рд╛ рдЧрдбрд╝рдмрдбрд╝ рдирд┐рдХрд▓рд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк wx.ListCtrl рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЗрдЦ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдирд┐рдХрд▓реЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рд▓реЗрдЦ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЕрдЧрд▓реЗ рдПрдХ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП wx.aui - рдпрд╣ рдЯреИрдм рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдиреНрдирдд рдиреЛрдЯрдмреБрдХ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдкреНрд░рдХрдЯ рд╣реЛрдЧрд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдЕрд▓рд╛рд╡рд╛:рдХреЛрдб
рд╡рд░реНрдЧ regexps (wx.Frame):
рдбреАрдИ __init __ (рд╕реНрд╡, рдореБрдЦреНрдп, рд╕реНрдХреАрдорд╛, рдЯреЗрдмрд▓, рдХрдиреЗрдХреНрд╢рди):
wx.Frame .__ init__ (рд╕реНрд╡, рдорд╛рддрд╛-рдкрд┐рддрд╛ = рдХреЛрдИ рдирд╣реАрдВ, рдЖрдИрдбреА = wx.ID_ANY, ...)
рд╕реБрдкрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рд╡рд░реНрдЧ regexps (wx.Frame):
рдбреАрдИ __init __ (рд╕реНрд╡, рдореБрдЦреНрдп, рд╕реНрдХреАрдорд╛, рдЯреЗрдмрд▓, рдХрдиреЗрдХреНрд╢рди):
рд╕реБрдкрд░ (regexps, self) .__ init__ (рдорд╛рддрд╛-рдкрд┐рддрд╛ = рдХреЛрдИ рдирд╣реАрдВ, id = wx.ID_ANY, ...)
рдЬреЗрдиреЗ рджреНрд╡рд╛рд░рд╛