Tcl рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЕрднрд┐рд╡рд╛рджрди, рд╣рдмреНрд░! % рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ рдЬреИрд╕реЗ tcl рдФрд░ рдЗрд╕рдХреА рдЪрд┐рддреНрд░рдордп рдЯреВрд▓рдХрд┐рдЯ tkред рднрд╛рд╖рд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рдЪреАрд▓реА рд╣реИ (рдореЗрд░реА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, "рдХреНрд▓рд╛рдЙрдб" рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рдЕрджреНрднреБрдд рдЕрд╢реБрджреНрдз рднрд╛рд╖рд╛ - рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓рдШреБ-рд▓реЗрдЦ / рдорд┐рдиреА-рдкрд╛рда рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ (рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ "рдЯреАрдИрд╕реАрдПрд▓ / рдЯреАрдХреЗ рдореЗрдВ рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдкреБрд╕реНрддрдХ рд╕реЗ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ) рдмрд╕ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрдврд╝реЗрдВ)ред рдЗрд╕ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░,% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХрд╛ рд╕рдмрд╕реЗ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг, рдЖрдк рд▓рд┐рдВрдХ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд╕рд╛ - tcl рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдПрдХ рдРрд╕рд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреЗрдбрд╝ рдХреА рд╢рд╛рдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде "рдХреБрдВрдЬреА-рдореВрд▓реНрдп" рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬрдЯрд┐рд▓ рдЖрджреЗрд╢рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдХреЙрд░реНрдб рдЖрдИрдбреА), рдПрдХ рдорд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдФрд░ рдХреБрдВрдЬреАред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ tcl рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдореЗрдВ:
dict set nonUserSettings 0 title "myProgram" dict set nonUserSettings 0 minWidth 800 dict set nonUserSettings 0 minHeight 600 dict set nonUserSettings 0 resizableX 1 dict set nonUserSettings 0 resizableY 1 

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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
 dict get <-> <> 

рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ Tk рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдВред рдирд┐рдпрдорд┐рдд рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 wm title . "myProgram" wm resizable . 1 1 wm minsize . 800 600 

рд╣рдорд╛рд░рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 wm title . [dict get $nonUserSettings 0 "title"] wm resizable . [dict get $nonUserSettings 0 "resizableX"] [dict get $nonUserSettings 0 "resizableY"] wm minsize . [dict get $nonUserSettings 0 "minWidth"] [dict get $nonUserSettings 0 "minHeight"] 

рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЧрд╛? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╢рдмреНрджрдХреЛрд╢ (рдЬреИрд╕рд╛ рдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, tcl рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛) рдкрд░рд╕реНрдкрд░ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╕рдордп рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдкрдХреА GUI рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди, рдпрд╣ рд╕рдм рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдареАрдХ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХрд╛ рдбреЗрдЯрд╛ рдЕрдзрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓ рд░рдЦрддреЗ рд╣реИрдВ)ред рдФрд░ рджреВрд╕рд░реЗ рдкрд░ ... рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╢реАрд░реНрд╖ рдореЗрдиреВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреА рддрд░рд╣, рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдирд╛рдо рд╣реИ, рд╕рд╛рде рд╣реА рдЖрдВрд╕реВ рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░рд╛ рдмрдирд╛рдПрдВ
рд╢рдмреНрджрдХреЛрд╢:
 dict set menuBarSettings 0 name mainMenuBar dict set menuBarSettings 0 tearOff 1 

рддреБрд░рдВрдд рдореЗрдиреВ рдмрд╛рд░ рд╕реЗ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рдореЗрдиреВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ:
 option add *tearOff [dict get $menu-settings 0 "tearOff"] 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╢реАрд░реНрд╖ рдореЗрдиреВ рдХреЛ рд╕рдХреНрд╖рдо рдФрд░ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
 dict set userSettings 0 menuBar true 

рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде, рдЪрд▓реЛ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВред рд╕рдВрдкреВрд░реНрдг рдЬреАрдпреВрдЖрдИ рдХрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ - рдХреБрдВрдЬреА рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдХреНрд░рдордмрджреНрдз рд░реВрдк рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ред рдореЗрдиреВ рд╢реАрд░реНрд╖рдХ рдХреЗ рдореЗрдиреВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдПрдВ:
 dict set menuBarItems_ZeroLevel 0 name connectionItem dict set menuBarItems_ZeroLevel 0 text_item "Connection" dict set menuBarItems_ZeroLevel 1 name helpItem dict set menuBarItems_ZeroLevel 1 text_item "Help" 

рдЕрдм рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдореВрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрд╕ рдореЗрдиреВ рд╣реЗрдбрд░ рдХреА рдЖрдИрдбреА рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рд╕реНрддрд░ рдмрд╛рдзреНрдп рд╣реИ):
 dict set menuBarItems_FirstLevel 0 parent 0 dict set menuBarItems_FirstLevel 0 label "Open" dict set menuBarItems_FirstLevel 0 command NONE dict set menuBarItems_FirstLevel 1 parent 0 dict set menuBarItems_FirstLevel 1 label "Editt" dict set menuBarItems_FirstLevel 1 command NONE dict set menuBarItems_FirstLevel 2 parent 0 dict set menuBarItems_FirstLevel 2 label "Exit" dict set menuBarItems_FirstLevel 2 command { exit; } dict set menuBarItems_FirstLevel 3 parent 1 dict set menuBarItems_FirstLevel 3 label "About" dict set menuBarItems_FirstLevel 3 command NONE dict set menuBarItems_FirstLevel 4 parent 1 dict set menuBarItems_FirstLevel 4 label "Help" dict set menuBarItems_FirstLevel 4 command NONE 

рдореИрдВ рдореЗрдиреВ рдХреЗ рдорд╛рдирдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдмреЗрд╣рддрд░ рдореЗрдиреВ "рдбреНрд░рд╛рдЗрдВрдЧ" рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рд╕реАрдзреЗ рдЬрд╛рдПрдВ:
 #  ,   ""    proc assembleMyMenu {} { # ,       ,             global userSettings global menuBarSettings global menuBarItems_ZeroLevel global menuBarItems_FirstLevel # ,        if {[dict get $userSettings 0 "menuBar"]==true} { # ,  , : #       ( ,       ""      menu .[dict get $menuBarSettings 0 "name"] #          . config -menu .[dict get $menuBarSettings 0 "name"] #   .         dict for {id info} $menuBarItems_ZeroLevel { # info -        . ,   id-      ,     with     : dict with info { #        name  menu-bar-items       menu-settings: menu .[dict get $menuBarSettings 0 "name"].$name #    .[dict get $menuBarSettings 0 "name"] add cascade -label $text_item -menu .[dict get $menuBarSettings 0 "name"].$name #        ,     menu-bar-items_first-level dict for {iter data} $menuBarItems_FirstLevel { dict with data { #      ,   - : if {$id==$parent} { #    -     .[dict get $menuBarSettings 0 "name"].$name add command -label $label -command $command } } } } } } } 

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб:

 #Require main packages for work package require Tk # Data for non user settings dict set nonUserSettings 0 title "myPrograms" dict set nonUserSettings 0 minWidth 800 dict set nonUserSettings 0 minHeight 600 dict set nonUserSettings 0 resizableX 1 dict set nonUserSettings 0 resizableY 1 # Data for user settings dict set userSettings 0 menuBar true # Data for biuld menubar dict set menuBarSettings 0 name mainMenuBar dict set menuBarSettings 0 tearOff 1 # Data for 0-level menu dict set menuBarItems_ZeroLevel 0 name connectionItem dict set menuBarItems_ZeroLevel 0 text_item "Connection" dict set menuBarItems_ZeroLevel 1 name helpItem dict set menuBarItems_ZeroLevel 1 text_item "Help" # Data for 1-level menu dict set menuBarItems_FirstLevel 0 parent 0 dict set menuBarItems_FirstLevel 0 label "LogIn" dict set menuBarItems_FirstLevel 0 command NONE dict set menuBarItems_FirstLevel 1 parent 0 dict set menuBarItems_FirstLevel 1 label "LogOut" dict set menuBarItems_FirstLevel 1 command NONE dict set menuBarItems_FirstLevel 2 parent 0 dict set menuBarItems_FirstLevel 2 label "Exit" dict set menuBarItems_FirstLevel 2 command { exit; } dict set menuBarItems_FirstLevel 3 parent 1 dict set menuBarItems_FirstLevel 3 label "About" dict set menuBarItems_FirstLevel 3 command NONE dict set menuBarItems_FirstLevel 4 parent 1 dict set menuBarItems_FirstLevel 4 label "Help" dict set menuBarItems_FirstLevel 4 command NONE # Procedure for builing menu bar proc assembleMyMenu {} { global userSettings global menuBarSettings global menuBarItems_ZeroLevel global menuBarItems_FirstLevel if {[dict get $userSettings 0 "menuBar"]==true} { menu .[dict get $menuBarSettings 0 "name"] . config -menu .[dict get $menuBarSettings 0 "name"] dict for {id info} $menuBarItems_ZeroLevel { dict with info { menu .[dict get $menuBarSettings 0 "name"].$name .[dict get $menuBarSettings 0 "name"] add cascade -label $text_item -menu .[dict get $menuBarSettings 0 "name"].$name dict for {iter data} $menuBarItems_FirstLevel { dict with data { if {$id==$parent} { .[dict get $menuBarSettings 0 "name"].$name add command -label $label -command $command } } } } } } } # Main programm logic # Window Manager main settings wm title . [dict get $nonUserSettings 0 "title"] wm resizable . [dict get $nonUserSettings 0 "resizableX"] [dict get $nonUserSettings 0 "resizableY"] wm minsize . [dict get $nonUserSettings 0 "minWidth"] [dict get $nonUserSettings 0 "minHeight"] option add *tearOff [dict get $menuBarSettings 0 "tearOff"] assembleMyMenu 


рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдкрд╛рда / рд▓реЗрдЦ рдорджрджрдЧрд╛рд░ рд░рд╣реЗ рд╣реИрдВред рдирд╢реЗ рдХреА рд▓рдд tcl / tk рдХреЛрдб рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!

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


All Articles