TextTest GUIs рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд╛рдпрдерди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рднрд╛рдЧ реи

рд▓реЛрдЧреЛ рдЕрджреНрднреБрдд рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЯреЗрдХреНрд╕реНрдЯрдЯреЗрд╕реНрдЯ рдХрд╛рд░реНрдпрд╛рддреНрдордХ-рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛рдиреА рдХреА рдирд┐рд░рдВрддрд░рддрд╛ред рд▓реЗрдЦ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧред


рдЬреАрдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд░реАрдХреЗ


рдЬреАрдпреВрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг рдХрд╛ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рджреЛ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
  1. рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░реАрди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрдВ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ
  2. рдРрд╕реЗ рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ

рдкрд╣рд▓реЗ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЕрд╕реНрдерд┐рд░рддрд╛ рд╣реИрдВ, рдпрд╣ рдлрд╝реЙрд░реНрдо рдкрд░ рдмрдЯрдиреЛрдВ рдХреА рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рджреНрд╡рд╛рд░рд╛, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛, рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ - рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдбреНрд░реЙрдк рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд╡реЗ рдЬреАрдпреВрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдлрд╝реЙрдиреНрдЯ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ - рдлрд┐рд░ рд╕реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЧрд┐рд░ рдЬрд╛рдПрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЕрдЧрд▓реЗ рд╕рд░реНрд╡рд┐рд╕ рдкреИрдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЙрд╕рдиреЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдореЗрд░рд╛ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрдпреВрдЖрдИ рдХрд╛ рддрд░реНрдХ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдордЬрд╛рдХ рд╣реИред

рджреВрд╕рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ - рдкрд░реАрдХреНрд╖рдг рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдФрд░ рдХрдард┐рди рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡реЗ рдЕрдХреНрд╕рд░ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЧреИрд░-рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ред рдкреИрд░реЛрдВ рдХреЗ рд░реИрдкрд░ рдЗрд╕ рддрд░рд╣:
ActivateWindow("Unsaved Document 1 - gedit") SetEdit(5, "5") ClickButton("Save") Wait(10) VerifyLabel(2, 10) 

рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рди рджреЗрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдмрдВрдз рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕ рдмрдЯрди рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕ рд▓реЗрдмрд▓ рдиреЗ рдЗрд╕рдХрд╛ рдорд╛рди рдмрджрд▓ рджрд┐рдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрджрд▓ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо API рд╡рд┐рдЬреЗрдЯ рдЗрдВрдЯрд░реНрдирд▓реНрд╕ рддрдХ рдкреВрд░реНрдг рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рд╡рд┐рдЬреЗрдЯ рд╣реИ, рддреЛ рднреА рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЬреАрдпреВрдЖрдИ рдХреЗ рддрд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╕рд╛рди рд╣реИ, рд╣рдо рддрддреНрд╡реЛрдВ рдХреЗ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдПрдХ рдЕрдЪреНрдЫреЗ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдЖрдк рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдЧреИрд░-рд╕рдордХрд╛рд▓рд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдо рд╕рдорд╕реНрдпрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ URL рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреГрд╖реНрда рдиреЗ рд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдЖрдк рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдкреЗрдЬ рдФрд╕рддрди 5 рд╕реЗрдХрдВрдб рдореЗрдВ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ "рдирд┐рд╖реНрдард╛" рдХреЗ рд▓рд┐рдП 5 рдмрд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдордВрджреА рдФрд░ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХреГрддрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдХреБрдЫ рдЧреБрдкреНрдд рд╡рд┐рдЧреЗрдЯреНрд╕ рдкрд░ "рддреЗрдЬ" рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдФрд░ рдЬреИрд╕реЗ рд╣реА рд╡реЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд┐рддрд┐ рд▓реЗрддреЗ рд╣реИрдВ, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЕрдкрдардиреАрдп рдФрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЯреЗрдХреНрд╕реНрдЯрдЯреЗрд╕реНрдЯ рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИ?


рд╡рд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реАрдЯреЗрдХреНрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдмрд╛рдж рдореЗрдВ, рдЬреАрдпреВрдЖрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХреНрд╕реЗрд╕ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ "рд▓рдкреЗрдЯрддрд╛ рд╣реИ", рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЗрд╕рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдЖрд╡реЗрджрди рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ рднреА рдкрдВрдХреНрддрд┐ рдирд╣реАрдВ рдмрджрд▓рдиреА рд╣реЛрдЧреАред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдФрд░ рдЬрдм рдкрд░реАрдХреНрд╖рдг - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред

рддреЛ, рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ:


рд╕рд╣рдордд рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ - рдЕрджреНрднреБрдд, рдкрд░реАрдХреНрд╖рдг рдЖрд╕рд╛рдиреА рд╕реЗ, рдЖрд╕рд╛рдиреА рд╕реЗ, рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рд▓реЗрдЦрдХ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, GUI рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп gtk рд╣реИ, рдмрд╛рдХреА рдХреБрдЫ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдореЛрдб рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдЪреМрдерд╛ рдЙрджрд╛рд╣рд░рдгред Tkinter рдкрд░ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ GUI рдХрд╛ рдкрд░реАрдХреНрд╖рдг


рдкрд░реАрдХреНрд╖рдг TestGUI рд╡рд░реНрдЧ рд╣реЛрдЧрд╛ред рд╡рд░реНрдЧ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд░реВрдк рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдПрдХ рдореВрд▓реНрдп рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ, рдФрд░ OnCalcSync рдпрд╛ OnCalcAsync рдмрдЯрди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рджрдмрд╛рдПрдВ, рдкрд╣рд▓рд╛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рджреЛ рд╕реЗ рдЧреБрдгрд╛ рдореВрд▓реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рджреВрд╕рд░рд╛ 10 рд╕реЗрдХрдВрдб рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рд╣рд╛рдВ, рдФрд░ рдореИрдВ рд░реВрдк рдХреА рднрдпрд╛рдирдХ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдХрдХреНрд╖рд╛ TestGUI
 class TestGUI: def __init__(self, root): self.root = root frame1 = Tkinter.Frame(self.root) frame1.pack(fill="both") frame2 = Tkinter.Frame(self.root) frame2.pack(fill="both") frame3 = Tkinter.Frame(self.root) frame3.pack(fill="both") frame4 = Tkinter.Frame(self.root) frame4.pack(fill="both") Tkinter.Label(frame1, text="Input:").pack(side="left") self.var_in = Tkinter.StringVar(value="") Tkinter.Entry(frame1, name="entry_in", textvariable=self.var_in).pack() Tkinter.Label(frame2, text="Output:").pack(side="left") self.label_out = Tkinter.Label(frame2, name="label_out") self.label_out.pack(side="left") Tkinter.Button(frame3, name="entry_calc_sync", text="OnCalcSync", width=15, command=self.on_press_sync).pack(side="left") Tkinter.Button(frame4, name="entry_calc_async", text="OnCalcAsync", width=15, command=self.on_press_async).pack(side="left") Tkinter.Button(frame4, name="entry_exit", text="OnExit", width=15, command=self.on_exit).pack(side="left") self.root.title("Hello World!") self.root.mainloop() def _calc(self): try: return str(int(self.var_in.get()) * 2) except: return "error input" def on_press_sync(self): self.label_out["text"] = self._calc() def _operation_finish(self): storytext.applicationEvent('data to be loaded') self.label_out["text"] = self._calc() def on_press_async(self): self.root.after(10 * 1000, self._operation_finish) def on_exit(self): self.root.destroy() 


рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, tkinter_ex рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ test.py рдХреЗ рдЖрдЧреЗ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЙрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ tkinter рд╕рдорд░реНрдерди рдЕрднреА рднреА "рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдФрд░ Tkinter рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рд╕рдорд░реНрдерди рд╣реИ" рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦрдХ рдЦреБрдж рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЯрд┐рдВрдХрд░ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдореЙрдбреНрдпреВрд▓ рд▓реЗрдмрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдкрд╛рда рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдорд░реНрде рд╣реИ, рд▓реЗрдХрд┐рди рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирдХ Tkinter.Label рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдореВрд▓ рдирд╛рдо рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЬреЛ рд▓реЗрдмрд▓ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ - "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ" рдФрд░ "__setitem__" рд╣рдо рдЗрд╕ рддрд░рд╣ рд▓реЙрдЧрд┐рдВрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: "рд▓реЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрд┐рдд рдкрд╛рда '% s' ( % s рдкрд░ рд╕реЗрдЯ) рдкрд╛рдпрдерди рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХреЛрдб рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ
tkinter_ex.py
 # -*- coding: utf-8 -*- import Tkinter import logging origLabel = Tkinter.Label class Label(origLabel): def __init__(self, *args, **kw): origLabel.__init__(self, *args, **kw) self.logger = logging.getLogger("gui log") def _update_text(self, value): self.logger.info("Updated Text for label '%s' (set to %s)" % (self.winfo_name(), value)) def configure(self, *args, **kw): origLabel.configure(self, *args, **kw) if "text" in kw: self._update_text(kw["text"]) def __setitem__(self, key, value): origLabel.__setitem__(self, key, value) if key == "text": self._update_text(value) config = configure internal_configure = origLabel.configure Tkinter.Label = Label 


рддреЛ, рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ: рдПрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг-рд╕реВрдЯ рдЬреЛрдбрд╝реЗрдВ "Suite_GUI" рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЗрд╕реЗ "Test_GUI_Sync" рдкреИрд░рд╛рдореАрдЯрд░ "gui" рдХреЗ рд╕рд╛рде рдХрд░реЗрдВред simpletests \ config.cfg рдореЗрдВ рд╣рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо tkinter рдХреЗ рдЖрдзрд╛рд░ рдкрд░ GUI рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ
 # Mode for Use-case recording (GUI, console or disabled) use_case_record_mode:GUI # How long in seconds to wait between each GUI action slow_motion_replay_speed:3.0 # Which Use-case recorder is being used use_case_recorder:storytext # Single program to use as interpreter for the SUT interpreter:storytext -i tkinter virtual_display_count:0 

рдореИрдВ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛: "virtual_display_count", рдпрд╣ рдХреЗрд╡рд▓ UNIX рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдкрдХреЛ Xvfb рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг, рдпрджрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ StoryText рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╕реНрдкреНрд▓реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ Xvfb рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ 0 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдИрдбреАрдИ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдореЗрдиреВ рдореЗрдВ "Test_GUI_Sync" рдЖрдЗрдЯрдо "рд░рд┐рдХреЙрд░реНрдб рдЙрдкрдпреЛрдЧ-рдХреЗрд╕" рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЪрд▓рд╛рдПрдВ, рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рдХреБрдЫ рднреА рди рдмрджрд▓реЗрдВред рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рд╕рд░рд▓ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ:
рдЬреАрдпреВрдЖрдИ рдлрд╛рд░реНрдо

рдЗрд╕рдореЗрдВ, рдЖрдкрдХреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, "рдЗрдирдкреБрдЯ" рдлрд╝реАрд▓реНрдб рдореЗрдВ рдорд╛рди рджрд░реНрдЬ рдХрд░реЗрдВ, "OnCalcSync" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ "рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, StoryText рд╣рдореЗрдВ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╡ рдирд╛рдо рджреЗрдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рднрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рд╕реЗрдЯрд┐рдВрдЧ

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рдмрдЪрд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ, рдЖрдк рдбрд┐рд╕реНрдХ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: simpletests \ storytext_files \ ui_map.conf, рдЬреЛ рдХрд┐ рд╣рдо рдЕрднреА рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдЙрдкрдирд╛рдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдлрд╝рд╛рдЗрд▓ usecase.cfg рдкрд░ рдкрд░реАрдХреНрд╖рдг (Test_GUI_Sync) рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рднреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирд╡ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ:
 enter_data 5 run_calc_sync exit_from_form 

stdout.cfg рдореЗрдВ, рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рдж рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЙрд░реНрдо рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдВ рд╣рдо рд▓реЗрдмрд▓ рдорд╛рди "рд▓реЗрдмрд▓ 'рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯреЗрдб рдкрд╛рда' рд▓реЗрдмрд▓_рдЖрдЙрдЯ '(10 рдкрд░ рд╕реЗрдЯ) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдПрдХ рдкрдВрдХреНрддрд┐ рджреЗрдЦреЗрдВрдЧреЗред рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдХрджрдо

рдкрд╛рдВрдЪрд╡рд╛ рдЙрджрд╛рд╣рд░рдгред Tkinter рдкрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬреАрдпреВрдЖрдИ рдХрд╛ рдкрд░реАрдХреНрд╖рдг


рдПрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг "Test_GUI_Async" рдХреЛ "Suite_GUI" рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рдмрд╛рд░ рд▓рд┐рдЦреЗрдВ, рдХреЗрд╡рд▓ "OnCalcSync" рдХреЗ рдмрдЬрд╛рдп "OnCalcAsync" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдмрд╛рд░ рдЖрдкрдХреЛ 10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреАред рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдирдП рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрде "run_calc_async" рд╣реЛрдЧрд╛ред рд╣рдордиреЗ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдФрд░ рд╕реНрдЯреЛрд░реАрдЯреЗрдХреНрд╕реНрдЯ рдиреЗ рдЙрдиреНрд╣реЗрдВ рдпрд╛рдж рдХрд┐рдпрд╛ред

рдпрд╣ рдкрд░реАрдХреНрд╖рдг рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдкрддреНрд░ рдкрд░ рдХреНрд░рд┐рдпрд╛рдПрдБ рдЕрдм рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╣реЛрддреА рд╣реИрдВ рдФрд░ "TestGUI._operation_finish" рд╕реЗ рджрд╕ рд╕реЗрдХрдВрдб рдкрд╣рд▓реЗ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж test.py рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд╛рдЗрди рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ:
 storytext.applicationEvent('data to be loaded') 

рдЬреЛ StoryText рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдиреЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рд░реБрдХрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдШрдЯрдирд╛ рдХреЗ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдЖрдк рдирдП рдкрд░реАрдХреНрд╖рд╛ рдореЗрдВ usecase.cfg рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ:
 enter_data 5 run_calc_async wait for data to be loaded exit_from_form 

рдпрд╛рдиреА рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдШрдЯрдирд╛ "рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИ" рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╣рдо рдлреЙрд░реНрдо рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдкрд░рд┐рдгрд╛рдо рдмрдЪрд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдЯреЛрд░реАрдЯреЗрдХреНрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдзреИрд░реНрдпрдкреВрд░реНрд╡рдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдмреИрдЪ рдирд┐рд╖реНрдкрд╛рджрди


рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ рдкрд░ рднреА рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП, TextTest рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдмрд╛рдж рдХреА рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рдмреИрдЪ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╛ рддреЛ рдЗрд╕реЗ рдПрдХ рдкреНрд░рд╛рд░реВрдк (HTML, JUnit, Jenkins) рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬ рд░рд╣рд╛ рд╣реИред

рд╣рдо рд╕рдм рдХреБрдЫ html рдореЗрдВ рдЕрдирд▓реЛрдб рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрде рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ HTML рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп config.cfg рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:
 [batch_result_repository] default:batchresult [historical_report_location] default:historicalreport 

рд╡рд╣рд╛рдВ рдЖрдк рдХрд╛рдлреА рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдЙрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдпрд╣рд╛рдВ рдмреИрдЪ рдореЛрдб рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реИред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдЬрдЧрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "-b рдирд╛рдЗрдЯрдЬреЙрдм" рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде texttest.py рдореЙрдбреНрдпреВрд▓ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:
 python c:\TextTest\texttest-3.24\source\bin\texttest.py -b nightjob 

рдлрд┐рд░ рд╕реЗ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП, рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рднреА рд╣реИ, рдпрд╣рд╛рдВ рдЖрдк рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рд╕рд┐рдВрдкрд▓рд╕реНрдЯреЗрдЯреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрдЧрд▓ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдмреИрдЪрд╕реНрдкреЗрд╕рд▓реНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЙрдирдореЗрдВ рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "-рдХреЙрд▓ рд╡реЗрдм" рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдХрд░ html рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 python c:\TextTest\texttest-3.24\source\bin\texttest.py -b nightjob -coll web 

рдЕрдм рдПрдХ рдФрд░ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдлрд╝реЛрд▓реНрдбрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде HTML рдкреГрд╖реНрда рдирд┐рд╣рд┐рдд рд╣реИред рдХрдИ рджрд┐рдиреЛрдВ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рдж, рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо

рдареАрдХ рд╣реИ, рдпрд╛ рдЖрдк рд╕реНрд╡рдпрдВ TextTest рдХреЗ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ, рд╡реИрд╕реЗ, рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рдЖрдБрдХрдбрд╝реЗ - рд▓рдЧрднрдЧ 4,000 рдкрд░реАрдХреНрд╖рдг рджреИрдирд┐рдХ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд▓рдЧрднрдЧ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ 100% рдХреЗ рдХрд░реАрдм рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХрд╡рд░реЗрдЬ рдХрд╛ рдкреНрд░рддрд┐рд╢рдд рдЦреБрдж рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдХрд╣рддрд╛ рд╣реИ)ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджреЗрдирд╛


рдЖрдХрд░реНрд╖рдг рдЖрддреЗ рд╣реИрдВ

рдЖрдЗрдП рдореБрдЦреНрдп рд░реВрдк рд╕реЗ GUI рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реБрдУрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:


рд╡рд┐рдкрдХреНрд╖

рдпрд╣ рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд┐рдкрдХреНрд╖ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рди рдХрд░реЗрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рд╡реЗ рд╣реИрдВ:


рд╡рд┐рдХрд▓реНрдк

рдпрджрд┐ рдЖрдк рдЕрдЬрдЧрд░ рдореЗрдВ рдЬреАрдпреВрдЖрдИ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд┐рд╡рд░рдг рдЕрдзреВрд░рд╛ рд╣реЛрдЧрд╛, рдпрд╣рд╛рдБ рд╣рдо рдХреНрдпрд╛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ:

рд░реЛрдмреЙрдЯрдлреНрд░реИрдорд╡рд░реНрдХ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ , рдпрд╣ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕реЛрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдпрд╣ TextTest рд╕реНрддрд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рдирдЬрд╝рд░ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬреЛ рдПрдХ рдЙрдкрдХрд░рдг рдЪреБрдирддрд╛ рд╣реИред

ldtp рдЕрдЧрд▓рд╛ GUI рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг рд╣реИред рдЗрд╕рдХреЗ рддреАрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ
рд▓рд┐рдирдХреНрд╕ / рд╡рд┐рдВрдбреЛрдЬ / рдУрдПрд╕ рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╢рдГ рдПрд▓рдбреАрдЯреАрдкреА / рдХреЛрдмрд░рд╛ / рдкрд╛рдпрдореЗрдЯред рдпрд╣ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ (рдЬрд╛рд╡рд╛ / рд░реВрдмреА / рд╕реА #, рдЖрджрд┐) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рдЕрдЬрдЧрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкреНрд░рд▓реЗрдЦрди рдкрд╕рдВрдж рдЖрдпрд╛ред рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ред
рдореБрдЭреЗ рдХреЗрд╡рд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд╕рдВрдж рдирд╣реАрдВ рдерд╛, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рд╡реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ:
 selectmenuitem('frmUnsavedDocument1-gedit', 'mnuFile;mnuOpen') settextvalue('frmUnsavedDocument1-gedit', 'txt0', 'Testing editing') setcontext('Unsaved Document 1 - gedit', '*Unsaved Document 1 - gedit') verifytoggled('dlgOpenFile...', 'tbtnTypeafilename') 

рдпрд╛рдиреА рдЗрдЪреНрдЫрд┐рдд рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╛ рддреЛ рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИ рдпрд╛ рд░рд╛рдЬреНрдп рдХреЛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред TextTest рдХреЗ рдмрд╛рдж рдПрдХ рдХрджрдо рдкреАрдЫреЗ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреБрдЫ рдЕрднреА рднреА рдмрд╛рдж рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ ldtp рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ pywinauto рдФрд░ рдПрдХ рд╣рдм рдкрд░ рдЖрдк рдХреБрдЫ рд╢рдмреНрдж рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рдПрд▓рдбреАрдЯреАрдкреА рдореЗрдВ рд╕рдорд╛рди рд╣реИ - рд╣рдо рдЙрд╕ рддрддреНрд╡ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рд╡рд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдбреЙрдЧрдЯреЗрд▓ рдмрд╣реБрдд рдордЬрдмреВрддреА рд╕реЗ рдпреВрдирд┐рдХреНрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, "GNOME 3, KDE4.8" рдФрд░ "рдЧрдиреЛрдо 2" рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╢реЗрд▓ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрднреА рднреА рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреБрдЫ рдХреЛ рдпреВрдирд┐рдХреНрд╕ рдХреЗ рддрд╣рдд рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдЬрдЧрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ pyGTK рдХреЗ рд▓рд┐рдП GUIs рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯрд╛рд░ ред рдЕрдВрддрд┐рдо рд░рд┐рд▓реАрдЬ рдХреА рддрд╛рд░реАрдЦ 11/13/2005 рд╣реИред рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдЗрддрдиреЗ рд╕рд╛рд▓реЛрдВ рдХреЗ рдмрд╛рдж рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд┐рдирд╛, рд╡рд╣ рднреА рдирд╣реАрдВ рдХрд░ рдкрд╛рдИ, рдЬреЛ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ Tkinter рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pyGTK рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдЖрд╡реЗрджрдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдореИрдВрдиреЗ рднреА рдирд╣реАрдВ рджреЗрдЦрд╛ред

pyAA рдПрдХ рдФрд░ рдкрд░рд┐рддреНрдпрдХреНрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░ 2005 рдХреЗ рдмрд╛рдж рд╕реЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд░рд╛рд╡рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╣реИ ...

pyGUIUnit рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп PyQt рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреВрд░реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдФрд░ рджреЛ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрди рдкрд░ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реБрдП, рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрднреА рднреА рдХрд╛рдлреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкрд░реАрдХреНрд╖рдг рдврд╛рдБрдЪреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рд╡реЗ рдХреНрдпреЛрдВ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдХреБрд▓: Tkinter рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЕрдЬрдЧрд░ рдкрд░ рдЬреАрдпреВрдЖрдИ рдХреЗ рддрд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдХрдо рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рднреВрд▓ рдЧрдП рд╣реИрдВред рдЙрди 2-3 рдЬреЛ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВ, рд╡реЗ рдЗрд╕ рддрдереНрдп рдХреЛ рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗред рдЯреЗрдХреНрд╕реНрдЯрдЯреЗрд╕реНрдЯ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдм рддрдХ рдХреА рд╕рд╣реА рдкрд╕рдВрдж рд╣реИ, рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In165833/


All Articles