{"id":340987,"date":"2022-11-09T09:00:13","date_gmt":"2022-11-09T09:00:13","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=340987"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=340987","title":{"rendered":"<span>\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a\u0430 Google \u043d\u0430 \u0442\u0430\u0447\u0431\u0430\u0440\u0435? \u041e\u0431\u0437\u043e\u0440 Python-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 PyTouchBar<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/l3\/kp\/qa\/l3kpqa7e8l-adoxkegazsdoe2so.png\" data-src=\"https:\/\/habrastorage.org\/webt\/l3\/kp\/qa\/l3kpqa7e8l-adoxkegazsdoe2so.png\"\/><\/div>\n<p>  \u0412 2016 \u0433\u043e\u0434\u0443 Apple \u0432\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0432 MacBook Pro \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u0443\u044e OLED-\u043f\u0430\u043d\u0435\u043b\u044c. \u041f\u043e \u0441\u0443\u0442\u0438, \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438. \u041d\u043e \u0441 \u043d\u0435\u0439 \u0447\u0443\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0439: \u043d\u0430 \u0442\u0430\u0447\u0431\u0430\u0440 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u0438 \u0434\u0430\u0436\u0435 \u043c\u0435\u0434\u0438\u0430\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. <\/p>\n<p>  \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0433\u0440\u044b \u0441 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u0442\u0430\u0447\u0431\u0430\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 PyTouchBar. <\/p>\n<blockquote><p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043a\u043e\u043d\u043a\u0443\u0440\u0441 \u043d\u0430 \u043f\u043b\u044e\u0448\u0435\u0432\u043e\u0433\u043e \u0442\u0438\u0440\u0435\u043a\u0441\u0430.<\/p><\/blockquote>\n<p><a name=\"habracut\"><\/a><br \/>  <font color=\"#EB4247\"><\/p>\n<h2>\u041c\u0435\u043d\u044e \u0438\u0433\u0440\u044b: \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/h2>\n<p><\/font><br \/>  <b>\u041a\u043d\u043e\u043f\u043a\u0430 \u00ab\u0438\u0433\u0440\u0430\u0442\u044c\u00bb.<\/b> PyTouchBar \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 Tkinter. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438 \u043f\u0435\u0440\u0432\u044b\u0439, \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u0438. \u0410 \u043f\u043e\u0441\u043b\u0435 \u2014 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c GUI-\u043e\u043a\u043d\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0430\u0447\u0431\u0430\u0440\u0435. \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u0438\u0433\u0440\u0430\u0442\u044c\u00bb.<\/p>\n<pre><code class=\"plaintext\">from tkinter import * import PyTouchBar  # \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430 Tkinter root = Tk()  # \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 starter = PyTouchBar.TouchBarItems.Button(title='\u0438\u0433\u0440\u0430\u0442\u044c', color=(PyTouchBar.Color.green))   # \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 PyTouchBar.set_touchbar([starter]) # \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u043a\u043d\u0430  PyTouchBar.prepare_tk_windows(root)   root.mainloop() <\/code><\/pre>\n<p>  <i>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438.<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043a\u043d\u043e\u043f\u043a\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/g_\/l7\/eo\/g_l7eouea2nsza2bvurbzmtqpms.png\" data-src=\"https:\/\/habrastorage.org\/webt\/g_\/l7\/eo\/g_l7eouea2nsza2bvurbzmtqpms.png\"\/><\/div>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u043e\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 PuTouchBar.Color, \u0445\u043e\u0442\u044f \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 rgba. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u043e\u0440\u0442\u0435\u0436 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <code>(r, g, b, a)<\/code>, \u0433\u0434\u0435 r, g, b, a \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 0 \u0434\u043e 1. <\/p><\/blockquote>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442. \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>action<\/code> \u0438 \u0441\u043e\u0441\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<pre><code class=\"plaintext\">...  def start(button):    # \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0441\u0446\u0435\u043d\u044b game    print('Hello world')  starter = PyTouchBar.TouchBarItems.Button(title='\u0438\u0433\u0440\u0430\u0442\u044c', color=(PyTouchBar.Color.green), action=start)  ... <\/code><\/pre>\n<p>  <i>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f action \u043a\u043d\u043e\u043f\u043a\u0438.<\/i><\/p>\n<p>  \u041f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 <code>start<\/code> \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0441\u0446\u0435\u043d\u044b <code>game<\/code>.<\/p>\n<p>  <b>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a\u0430.<\/b> \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u043d\u043e \u0438 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u00ab\u0441\u0442\u0435\u043f\u043f\u0435\u0440\u044b\u00bb \u2014 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a\u0430.<\/p>\n<pre><code class=\"plaintext\">...  # \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c speed = 2   def set_speed(stepper):    global speed   speed = int(stepper.value)  # \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0435\u043f\u043f\u0435\u0440\u0430 speed_p = PyTouchBar.TouchBarItems.Stepper(min = 2, max = 8, action = set_speed)  # \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u0441\u0442\u0435\u043f\u043f\u0435\u0440\u0430 PyTouchBar.set_touchbar([speed_p, starter])   ... <\/code><\/pre>\n<p>  <i>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043f\u043f\u0435\u0440\u0430.<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u044f\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/w2\/bi\/5y\/w2bi5ysqyhlpsoa-r5-x7j2t2ec.png\" data-src=\"https:\/\/habrastorage.org\/webt\/w2\/bi\/5y\/w2bi5ysqyhlpsoa-r5-x7j2t2ec.png\"\/><\/div>\n<p>  <\/p>\n<blockquote><p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 PyTouchBar \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0421\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u2014 \u043f\u0430\u043b\u0438\u0442\u0440\u044b, \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043b\u0435\u0439\u0431\u043b\u044b, \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0438\u0433\u0440\u0443 \u043d\u0438\u0436\u0435. \u0421 \u043f\u043e\u043b\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 <a href=\"https:\/\/github.com\/Maxmad68\/PyTouchBar\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p><\/blockquote>\n<p>  <a href=\"https:\/\/slc.tl\/7ihzg\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pt\/wt\/-p\/ptwt-pcef2msq7duvzrwfkt4gbo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/pt\/wt\/-p\/ptwt-pcef2msq7duvzrwfkt4gbo.png\"\/><\/div>\n<p><\/a><br \/>  <font color=\"#EB4247\"><\/p>\n<h2>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0446\u0435\u043d\u0430: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u044b \u0438 \u0430\u0441\u0441\u0435\u0442\u043e\u0432<\/h2>\n<p><\/font><br \/>  <b>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 2D-\u0441\u0446\u0435\u043d\u044b.<\/b> \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u0438\u0433\u0440\u0430\u0442\u044c\u00bb \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>game<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0441\u0446\u0435\u043d\u044b \u2014 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a\u0430 \u0438 \u043a\u0430\u043a\u0442\u0443\u0441\u043e\u0432. \u0418\u0445 \u044f \u0442\u043e\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043d\u043e\u043f\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u0447\u0430\u043d\u043a\u0430\u043c\u0438. <\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0447\u0430\u043d\u043a \u2014 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:  <\/p>\n<ul>\n<li><b>-2<\/b> \u2014 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440 \u0432\u0440\u0435\u0437\u0430\u043b\u0441\u044f \u0432 \u043a\u0430\u043a\u0442\u0443\u0441,<\/li>\n<li><b>-1<\/b> \u2014 \u043a\u0430\u043a\u0442\u0443\u0441,<\/li>\n<li><b>0<\/b> \u2014 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c,<\/li>\n<li><b>1<\/b> \u2014 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a,<\/li>\n<li><b>2<\/b> \u2014 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440 \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0443\u043b \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u0442\u0443\u0441.<\/li>\n<\/ul>\n<p>  \u041a\u0430\u0440\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a: <\/p>\n<pre><code class=\"plaintext\">map = [1, 0, 0, -1, 0, -1, 0] <\/code><\/pre>\n<p>  <b>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/b> \u041a\u043d\u043e\u043f\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>image<\/code>: \u043d\u0430 \u0444\u043e\u043d \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. <\/p>\n<p>  \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u00ab\u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c\u00bb \u0446\u0438\u043a\u043b\u043e\u043c \u043f\u043e map \u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a <code>buttons<\/code> \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0447\u0430\u043d\u043a\u043e\u0432.<\/p>\n<pre><code class=\"plaintext\">for chunk in range(len(map)):    if map[chunk] == 1:        buttons[chunk] = PyTouchBar.TouchBarItems.Button(image='assets\/trex.png', color=(PyTouchBar.Color.black), action=jumping)    elif map[chunk] == 0:        buttons[chunk] = PyTouchBar.TouchBarItems.Button(image='assets\/platform.png', color=(PyTouchBar.Color.black))    else:        buttons[chunk] = PyTouchBar.TouchBarItems.Button(image='assets\/cactus.png', color=(PyTouchBar.Color.black)) <\/code><\/pre>\n<p>  <i>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u0430\u0440\u0442\u044b map \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043d\u043e\u043f\u043e\u043a.<\/i><\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0445\u0435\u043c\u0430 \u043a\u0430\u0440\u0442\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0441\u044f \u0432 \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u0441\u0446\u0435\u043d\u0443.  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/od\/5b\/nt\/od5bnta6qdv6pxifczs7wow7soc.png\" data-src=\"https:\/\/habrastorage.org\/webt\/od\/5b\/nt\/od5bnta6qdv6pxifczs7wow7soc.png\"\/><\/div>\n<p>  <i>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0441\u0446\u0435\u043d\u044b.<\/i><\/p>\n<p>  <b>\u0427\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c.<\/b> \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0446\u0435\u043d\u044b \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c root-\u043e\u043a\u043d\u043e \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435. PyTouchBar \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 Tkinter-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c.<\/p>\n<pre><code class=\"plaintext\">def game(map):     # \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e root-\u043e\u043a\u043d\u0430     root = Tk()     # \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u0430\u0440\u0442\u044b map     ...     # \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u043e\u0432\u043e\u0433\u043e root-\u043e\u043a\u043d\u0430     root.mainloop()  def prepare():     root = Tk()          def start(button): # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043a\u043b\u0438\u043a\u0443 \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u0438\u0433\u0440\u0430\u0442\u044c\u00bb         root.destroy()         ...         # \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u0442\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0441\u0446\u0435\u043d\u044b         game(map, speed)                 ...      PyTouchBar.set_touchbar([starter])     PyTouchBar.prepare_tk_windows(root)     root.mainloop()             prepare() <\/code><\/pre>\n<p>  <i>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043e\u043a\u043d\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u041d\u043e \u043a\u0430\u043a \u0442\u043e\u0433\u0434\u0430 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a\u0430 \u0431\u0435\u0436\u0430\u0442\u044c?<\/p>\n<p>  <font color=\"#EB4247\"><\/p>\n<h2>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0446\u0435\u043d\u0430: \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u0430\u0434\u0440\u0430\u043c\u0438<\/h2>\n<p><\/font><br \/>  \u0427\u0442\u043e\u0431\u044b \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u043f\u043e\u0431\u0435\u0436\u0430\u043b, \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u0446\u0435\u043d\u0443 \u0431\u0435\u0437 <code>root.update()<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0443\u044e \u0441\u0446\u0435\u043d\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>root.destroy()<\/code> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 <code>map<\/code>. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0434\u0440\u043e\u0432. <\/p>\n<p>  <b>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u044b\u0445 \u043a\u0430\u0434\u0440\u043e\u0432.<\/b> \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043c\u0435\u043d\u044e \u0438\u0433\u0440\u044b \u043d\u0430 \u0441\u0446\u0435\u043d\u0443 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 <code>root<\/code> \u0431\u044b\u043b\u043e \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>root.destroy()<\/code> \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438.<\/p>\n<ol>\n<li><b>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u043d\u0438\u0435 time.<\/b> \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u00ab\u043f\u043e\u0442\u043e\u043a\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u00ab\u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c\u00bb \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c root-\u043e\u043a\u043d\u043e. \u0410 \u043e\u0442\u0441\u0447\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u0431\u0430\u0437\u0435 time.sleep().<\/li>\n<li><b>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 root.after().<\/b> \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e \u044f \u0443\u0434\u0430\u043b\u044f\u044e \u0441\u0442\u0430\u0440\u044b\u0435 \u043a\u0430\u0434\u0440\u044b.<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"plaintext\">...  # \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Tkinter \u0443\u0434\u0430\u043b\u0438\u0442 \u043a\u0430\u0434\u0440 \u0447\u0435\u0440\u0435\u0437 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u0438 speed = 2 root.after(1200 - speed*100, start.destroy)  root.mainloop()  ... <\/code><\/pre>\n<p>  <i>root.after(), \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 destroy.<\/i><\/p>\n<blockquote><p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u2014 \u0432\u0440\u0435\u043c\u044f, \u0441\u043f\u0443\u0441\u0442\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u0441\u044f root-\u043e\u043a\u043d\u043e. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u0433\u0440\u044b: \u0447\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u0434\u0440\u044b, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u0435\u0436\u0438\u0442 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a.<\/p><\/blockquote>\n<p>  <b>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0434\u0440\u043e\u0432.<\/b> \u041f\u043e \u0441\u0443\u0442\u0438, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u0434\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438. \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445: \u0434\u0435\u043b\u0430\u044e \u0441\u0440\u0435\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 <code>map<\/code> \u043d\u0430 \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0439 \u0447\u0430\u043d\u043a \u0432 \u043a\u043e\u043d\u0435\u0446. \u0410 \u043f\u043e\u0441\u043b\u0435 \u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u0441\u0446\u0435\u043d\u0443 game. <\/p>\n<pre><code class=\"plaintext\"># \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0447\u0430\u043d\u043a\u043e\u0432 \u0438 \u043a\u0430\u0434\u0440\u043e\u0432 while True:      new_map = map[1:]      # \u043f\u0435\u0440\u0432\u044b\u0439 \u0447\u0430\u043d\u043a \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440 (1)      new_map[0] = 1       # \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0430 \u043a\u0430\u043a\u0442\u0443\u0441\u0430 \u043f\u043e\u0434\u0440\u044f\u0434        if map[-1] == 0:                new_map.append(random.choice([0, -1]))      else:                new_map.append(0)       map = new_map      game(new_map, speed) <\/code><\/pre>\n<p>  <i>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0434\u0440\u043e\u0432. \u041e\u0434\u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u2014 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u043a\u0430\u0434\u0440 \u0438 \u0447\u0430\u043d\u043a.<\/i><\/p>\n<p>  \u041d\u0430 \u0442\u0430\u0447\u0431\u0430\u0440\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/t2\/r0\/b-\/t2r0b-5k02zmdhjfowxwsrhkyos.gif\" data-src=\"https:\/\/habrastorage.org\/webt\/t2\/r0\/b-\/t2r0b-5k02zmdhjfowxwsrhkyos.gif\"\/><\/div>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u043a\u0430\u0434\u0440\u043e\u0432. \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u0441\u0446\u0435\u043d\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u0447\u0430\u043d\u043a\u043e\u0432. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yd\/s0\/mq\/yds0mqfp06sh-ieewnspf4bqfc4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/yd\/s0\/mq\/yds0mqfp06sh-ieewnspf4bqfc4.png\"\/><\/div>\n<\/blockquote>\n<p>  <b>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/b> \u041f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u0442\u0430\u043f \u2014 \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0438\u0433\u0440\u0430\u044e\u0442 \u0432 Google-\u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a\u0430, \u2014 \u00ab\u043f\u0430\u0440\u043a\u0443\u0440 \u043f\u043e \u043a\u0430\u043a\u0442\u0443\u0441\u0430\u043c\u00bb. <\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u044b\u0436\u043e\u043a, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>jump<\/code> \u2014 \u043a \u043d\u0435\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u043e\u043c. \u0418 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a map \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0447\u0430\u043d\u043a\u0435 \u043a\u0430\u043a\u0442\u0443\u0441 \u0438 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440 \u043c\u043e\u0433\u043b\u0438 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438.  <\/p>\n<ul>\n<li><b>\u0414\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u0432\u0440\u0435\u0437\u0430\u043b\u0441\u044f \u0432 \u043a\u0430\u043a\u0442\u0443\u0441 \u2014 \u0447\u0430\u043d\u043a -2.<\/b> \u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f [1, -1], jump = 0.<\/li>\n<\/ul>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/42\/hi\/y_\/42hiy_d2f9dwk8wtfp32xkjtbwi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/42\/hi\/y_\/42hiy_d2f9dwk8wtfp32xkjtbwi.png\"\/><\/div>\n<p>  <\/p>\n<ul>\n<li><b>\u0414\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0443\u043b \u043a\u0430\u043a\u0442\u0443\u0441 \u2014 \u0447\u0430\u043d\u043a 2.<\/b> \u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f [1, -1], jump = 1.<\/li>\n<\/ul>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/k0\/kq\/yn\/k0kqynmnmeiuuhd6bs9pbrmevqk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/k0\/kq\/yn\/k0kqynmnmeiuuhd6bs9pbrmevqk.png\"\/><\/div>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u00ab\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438\u00bb \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435:<\/p>\n<pre><code class=\"plaintext\">...  jump = 0 # \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0433\u0434\u0435 \u0432\u0442\u043e\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0447\u0430\u043d\u043a map = [[1,0], 0, 0, -1, 0, -1, 0]  ...  while True:      # \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438:       # [1,0] \u2192 1 \u043a\u0430\u043a\u0442\u0443\u0441\u0430 \u043d\u0435\u0442, \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u0431\u0435\u0436\u0438\u0442      # [1,-1] \u2192 \u043a\u0430\u043a\u0442\u0443\u0441 \u0435\u0441\u0442\u044c: \u0435\u0441\u043b\u0438 jump = 1, \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e      zero_chunk = 1      # \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e       map[0] = [1,map[1]]                  # \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u043d\u0435 \u043f\u0440\u044b\u0433\u043d\u0443\u043b \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0447\u0430\u043d\u043a\u0435 \u0438 \u0432\u0440\u0435\u0437\u0430\u043b\u0441\u044f      if jump == 0 and map[0] == [1, -1]:                zero_chunk = -2      # \u043d\u0430 \u0447\u0430\u043d\u043a\u0435 \u0431\u0435\u0437 \u043a\u0430\u043a\u0442\u0443\u0441\u0430 jump \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442\u0441\u044f      elif jump >= 1 and map[0] == [1, 0]:                jump = 0                zero_chunk = 1      # \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u043f\u0440\u044b\u0433\u043d\u0443\u043b \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0447\u0430\u043d\u043a\u0435, \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e      elif jump == 1 and map[0] == [1,-1]:                zero_chunk = 2                points += 1         # \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u0430\u0440\u0442\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e      new_map = map[1:]      new_map[0] = zero_chunk      if map[-1] == 0:           new_map.append(random.choice([0, -1]))      else:           new_map.append(0)       map = new_map       game(new_map, speed) <\/code><\/pre>\n<p>  <i>\u0421\u0438\u0442\u0443\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0434\u0440\u043e\u0432.<\/i><\/p>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0441\u0446\u0435\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f: <\/p>\n<pre><code class=\"plaintext\">def game(buttons) ...       for b in range(len(map)):           # \u0435\u0441\u043b\u0438 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0443\u043b, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0430\u0441\u0441\u0435\u0442 \u0441\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435\u043c           if map[b] == -2:                buttons[b] = PyTouchBar.TouchBarItems.Button(image='assets\/loss.png', color=(PyTouchBar.Color.black))           # \u0435\u0441\u043b\u0438 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u043d\u0443\u043b, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0430\u0441\u0441\u0435\u0442 \u0441 \u043f\u0440\u044b\u0436\u043a\u043e\u043c           elif map[b] == 2:                buttons[b] = PyTouchBar.TouchBarItems.Button(image='assets\/lucky.png', color=(PyTouchBar.Color.black))  ... <\/code><\/pre>\n<p>  <i>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0441\u0446\u0435\u043d\u044b.<\/i><\/p>\n<p>  \u041d\u0430 \u0442\u0430\u0447\u0431\u0430\u0440\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jz\/j9\/fc\/jzj9fcb1366o1jrbragbfffc7dy.gif\" data-src=\"https:\/\/habrastorage.org\/webt\/jz\/j9\/fc\/jzj9fcb1366o1jrbragbfffc7dy.gif\"\/><\/div>\n<p>  <i>\u0414\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0431\u0435\u0433\u0430\u0442\u044c \u0438 \u043f\u0440\u044b\u0433\u0430\u0442\u044c!<\/i><\/p>\n<blockquote><p><b>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u0438 \u0442\u0435\u043a\u0441\u0442\u044b \u0442\u043e\u0436\u0435 \u0432\u0430\u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442:<\/b><\/p>\n<p>  \u2192 <a href=\"https:\/\/habr.com\/ru\/company\/selectel\/blog\/694436\/\">Docker \u043d\u0430 \u0440\u043e\u0443\u0442\u0435\u0440\u0435 MikroTik: \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438 \u043d\u0435 \u0443\u0442\u043e\u043d\u0443\u0442\u044c \u0432 \u0431\u0430\u0433\u0430\u0445<\/a><br \/>  \u2192 <a href=\"https:\/\/habr.com\/ru\/company\/selectel\/blog\/685206\/\">\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0431\u043e\u0442\u0430\u043c\u0438 \u0432 Telegram: \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u043d\u0430 Python \u0438 \u0431\u0430\u0433 \u0432 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0435<\/a><br \/>  \u2192 <a href=\"https:\/\/habr.com\/ru\/company\/selectel\/blog\/674172\/\">\u0414\u0435\u043b\u0430\u0435\u043c \u0442\u0435\u0442\u0440\u0438\u0441 \u0432 QR-\u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/a><\/p><\/blockquote>\n<p>  <font color=\"#EB4247\"><\/p>\n<h2>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0438\u0433\u0440\u044b: \u044d\u043b\u0435\u043c\u0435\u043d\u0442 Label<\/h2>\n<p><\/font><br \/>  \u0415\u0441\u043b\u0438 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u0432\u0441\u0435 \u0436\u0435 \u0432\u0440\u0435\u0437\u0430\u043b\u0441\u044f, \u0438\u0433\u0440\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c: \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043e\u0447\u043a\u043e\u0432 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.<\/p>\n<ul>\n<li><b>\u041f\u043e\u0434\u0441\u0447\u0435\u0442 \u043e\u0447\u043a\u043e\u0432.<\/b> \u0414\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u043e\u0447\u043a\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e points \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u043d\u0435\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u0438\u0432\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u0442\u0443\u0441. \u041d\u043e \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0439. <\/li>\n<li><b>\u0412\u044b\u0432\u043e\u0434 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/b> \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e Tkinter, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"plaintext\">def finish(points):     ...      # \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 label     label = PyTouchBar.TouchBarItems.Label(text = f'\u0423\u043f\u0441:( \u0412\u044b \u043d\u0430\u0431\u0440\u0430\u043b\u0438: {points}')      ... <\/code><\/pre>\n<p>  <i>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 Label.<\/i><\/p>\n<blockquote><p>\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Label \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b, \u0446\u0432\u0435\u0442\u0430 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b. \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0435\u0441\u0442\u044c \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 <a href=\"https:\/\/github.com\/Maxmad68\/PyTouchBar\/wiki\/Populate-TouchBar#methods\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p><\/blockquote>\n<p>  \u041f\u0440\u0438\u0442\u043e\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>finish<\/code> \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0441\u0446\u0435\u043d\u044b.<\/p>\n<pre><code class=\"plaintext\">while True:     points = 0      ...      # \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u043d\u0435 \u043f\u0440\u044b\u0433\u043d\u0443\u043b \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0447\u0430\u043d\u043a\u0435 \u0438 \u0432\u0440\u0435\u0437\u0430\u043b\u0441\u044f     if jump == 0 and map[0] == [1, -1]:         zero_chunk = -2     elif jump == 1 and map[0] == [1, -1]:         zero_chunk = 2         points += 1     ...     game(new_map, speed)        # \u0435\u0441\u043b\u0438 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a \u0432\u0440\u0435\u0437\u0430\u043b\u0441\u044f \u2014 \u0432\u044b\u0437\u0432\u0430\u0442\u044c finish()     if zero_chunk == -2:         finish(points) <\/code><\/pre>\n<p>  <i>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u00ab\u043a\u043e\u043d\u0435\u0446 \u0438\u0433\u0440\u044b\u00bb.<\/i><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gg\/zr\/8r\/ggzr8rihide7grrre7uykhdfgv4.gif\" width=\"80\" align=\"left\" data-src=\"https:\/\/habrastorage.org\/webt\/gg\/zr\/8r\/ggzr8rihide7grrre7uykhdfgv4.gif\"\/>\u0410\u0440\u0435\u043d\u0434\u0443\u0439\u0442\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043e\u0442 2 \u043c\u0438\u043d\u0443\u0442 \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0443\u044e\u0449\u0438\u0445. \u0418 <a href=\"https:\/\/slc.tl\/zgrbb\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435<\/a> \u0435\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u0433\u0435\u0439\u043c\u0438\u043d\u0433\u0430.   <\/p>\n<p>  <b>\u041a\u0430\u043a \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443?<\/b> \u0423 PyTouchBar \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 escape. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0435 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. <\/p>\n<pre><code class=\"plaintext\">...  def exit_f(button):     exit()  esc = PyTouchBar.TouchBarItems.Button(title = \"exit\", action = exit_f) PyTouchBar.set_touchbar(... , esc_key = esc)  ... <\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u041f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0434\u0430 <a href=\"https:\/\/github.com\/VladDoctor\/pytouchbar\">\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430<\/a> \u043d\u0430 GitHub. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435\u0441\u044c \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0439\u0442\u0435 \u0441\u0432\u043e\u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f.<\/p><\/blockquote>\n<p>  <font color=\"#EB4247\"><\/p>\n<h2>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 PyTouchBar<\/h2>\n<p><\/font><br \/>  <b>\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439.<\/b> \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435. \u042d\u0442\u043e \u043f\u043b\u043e\u0445\u043e, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u00ab\u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0435\u00bb \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438. <\/p>\n<p>  \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0435\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 Space \u2014 \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.<\/p>\n<p>  <b>\u00ab\u0421\u044b\u0440\u044b\u0435\u00bb \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b.<\/b> \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b (Control). \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u0442\u0435 \u0436\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u043d\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0425\u043e\u0442\u044f \u0443 \u043d\u0438\u0445 \u043d\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0434\u0430\u0442\u044c \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ji\/3j\/ow\/ji3jowvcvk_5qbovdukq7slk4a0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ji\/3j\/ow\/ji3jowvcvk_5qbovdukq7slk4a0.png\"\/><\/div>\n<p>  \u0410 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0432\u043e\u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 Button. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u00ab\u043f\u043e\u0434\u043e\u0433\u043d\u0430\u0442\u044c\u00bb \u043f\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0418, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 image_scale, \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.<\/p>\n<p>  <b>\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 gif.<\/b> \u042d\u0442\u043e \u043f\u043b\u043e\u0445\u043e, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0430\u0434\u0440\u043e\u0432\u043a\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043e\u043a\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e. \u041d\u043e \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<p>  <b>\u00ab\u041d\u0435\u043f\u0440\u044f\u043c\u043e\u0435\u00bb \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u043e\u043d.<\/b> \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u043a\u043d\u043e \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e. \u041c\u0435\u0442\u043e\u0434 <code>root.update()<\/code> \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  <b>\u0412 \u0441\u0435\u0442\u0438 \u043d\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/b> \u041e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/Maxmad68\/PyTouchBar\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c \u043d\u0430 GitHub<\/a>. \u0410 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0435 \u0447\u0430\u0441\u0442\u044c \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 Pygame. \u0411\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430 \u2014 \u0438 \u0432\u0441\u0435, \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Pygame \u0447\u0435\u0440\u0435\u0437 PyTouchBar \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0411\u0443\u0434\u0435\u043c \u0436\u0434\u0430\u0442\u044c \u0430\u043f\u0434\u0435\u0439\u0442\u043e\u0432 \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432.<\/p>\n<p>  <font color=\"#EB4247\"><\/p>\n<h2>\u041d\u0430 \u0447\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430?<\/h2>\n<p><\/font><br \/>  \u0414\u0430\u0436\u0435 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0444\u0442 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u044f\u0434 \u043a\u043d\u043e\u043f\u043e\u043a \u0434\u043b\u044f \u0432\u0441\u044f\u043a\u0438\u0445 \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e\u0435\u043b\u0430 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u0411\u0438\u0440\u043c\u0430\u043d\u0430. <\/p>\n<p>  \u041d\u043e Doom \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PyTouchBar \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e: \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a \u00ab\u0432\u044b\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c\u00bb \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0434\u0440\u044b \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0433\u0440\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043d\u0435\u043b\u044c. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043b\u0443\u0447\u0448\u0435 \u00ab\u043f\u0440\u044b\u0433\u043d\u0443\u0442\u044c \u0432 \u043d\u043e\u0440\u0443 \u0437\u0430 \u043a\u0440\u043e\u043b\u0438\u043a\u043e\u043c\u00bb \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0447\u0431\u0430\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Objective-C. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0432\u0438\u0434\u0436\u0435\u0442, \u043b\u0443\u0447\u0448\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0432\u0440\u043e\u0434\u0435 BetterTouchTool. <\/p>\n<blockquote><p>\u041f\u0440\u0438\u0434\u0443\u043c\u0430\u0439\u0442\u0435, \u043a\u0430\u043a\u0443\u044e \u0435\u0449\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438\u043b\u0438 \u0438\u0433\u0440\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0430\u0447\u0431\u0430\u0440\u0430. \u0421\u0430\u043c\u043e\u043c\u0443 \u043a\u0440\u0435\u0430\u0442\u0438\u0432\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0430\u0441\u043a\u043e\u0442\u0430 \u2014 \u043f\u043b\u044e\u0448\u0435\u0432\u043e\u0433\u043e \u0442\u0438\u0440\u0435\u043a\u0441\u0430 Selectel.<\/p><\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/selectel\/blog\/698218\/\"> https:\/\/habr.com\/ru\/company\/selectel\/blog\/698218\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/l3\/kp\/qa\/l3kpqa7e8l-adoxkegazsdoe2so.png\" data-src=\"https:\/\/habrastorage.org\/webt\/l3\/kp\/qa\/l3kpqa7e8l-adoxkegazsdoe2so.png\"\/><\/div>\n<p>  \u0412 2016 \u0433\u043e\u0434\u0443 Apple \u0432\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0432 MacBook Pro \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u0443\u044e OLED-\u043f\u0430\u043d\u0435\u043b\u044c. \u041f\u043e \u0441\u0443\u0442\u0438, \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438. \u041d\u043e \u0441 \u043d\u0435\u0439 \u0447\u0443\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0439: \u043d\u0430 \u0442\u0430\u0447\u0431\u0430\u0440 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u0438 \u0434\u0430\u0436\u0435 \u043c\u0435\u0434\u0438\u0430\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. <\/p>\n<p>  \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0433\u0440\u044b \u0441 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u0442\u0430\u0447\u0431\u0430\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 PyTouchBar. <\/p>\n<blockquote><p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043a\u043e\u043d\u043a\u0443\u0440\u0441 \u043d\u0430 \u043f\u043b\u044e\u0448\u0435\u0432\u043e\u0433\u043e \u0442\u0438\u0440\u0435\u043a\u0441\u0430.<\/p><\/blockquote>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-340987","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/340987","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=340987"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/340987\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=340987"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=340987"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=340987"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}