From 7d0a87fc0953111907d01382f0c5ec6e14883b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=AB=8B=E5=B8=AE?= <3294713004@qq.com> Date: Sun, 4 Jan 2026 04:08:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(boards):=20python=5Fmixpy=E4=B8=8B?= =?UTF-8?q?=E6=9B=B4=E6=96=B0Turtle=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加screen.update、turtle.title和turtle.setup接口对应图形块 --- .../default_src/python_mixpy/blocks/turtle.js | 45 +++++++++++++++++++ .../python_mixpy/generators/turtle.js | 22 +++++++++ boards/default_src/python_mixpy/template.xml | 38 +++++++++++++--- common/msg/blockly/en.js | 3 ++ common/msg/blockly/zh-hans.js | 3 ++ common/msg/blockly/zh-hant.js | 3 ++ 6 files changed, 108 insertions(+), 6 deletions(-) diff --git a/boards/default_src/python_mixpy/blocks/turtle.js b/boards/default_src/python_mixpy/blocks/turtle.js index bd562069..0a725576 100644 --- a/boards/default_src/python_mixpy/blocks/turtle.js +++ b/boards/default_src/python_mixpy/blocks/turtle.js @@ -437,6 +437,38 @@ export const turtle_bgcolor = { } }; +export const turtle_title = { + init: function () { + this.setColour(TURTLE_HUE); + this.appendValueInput('TITLE') + .setCheck(null) + .setAlign(Blockly.inputs.Align.RIGHT) + .appendField(Blockly.Msg.MIXLY_TURTLE_TITLE_SET); + this.setInputsInline(true); + this.setPreviousStatement(true); + this.setNextStatement(true); + } +}; + +export const turtle_setup = { + init: function () { + this.setColour(TURTLE_HUE); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_TURTLE_SETUP_SET); + this.appendValueInput('WIDTH') + .setCheck(null) + .setAlign(Blockly.inputs.Align.RIGHT) + .appendField(Blockly.Msg.MIXLY_WIDTH); + this.appendValueInput('HEIGHT') + .setCheck(null) + .setAlign(Blockly.inputs.Align.RIGHT) + .appendField(Blockly.Msg.MIXLY_HEIGHT); + this.setInputsInline(true); + this.setPreviousStatement(true); + this.setNextStatement(true); + } +}; + export const turtle_tracer = { init: function () { this.setColour(TURTLE_HUE); @@ -825,6 +857,19 @@ export const turtle_getscreen = { } +export const turtle_update = { + init: function () { + this.setColour(TURTLE_HUE); + this.appendValueInput('TUR'); + this.appendDummyInput() + .appendField(Blockly.Msg.MIXLY_TURTLE_UPDATE); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setInputsInline(true); + this.setTooltip(Blockly.Msg.MIXLY_TURTEL_EVENT_ONKEY_TOOLTIP); + } +}; + export const turtle_onkey = { init: function () { this.setColour(TURTLE_HUE); diff --git a/boards/default_src/python_mixpy/generators/turtle.js b/boards/default_src/python_mixpy/generators/turtle.js index 61750603..bdc371bb 100644 --- a/boards/default_src/python_mixpy/generators/turtle.js +++ b/boards/default_src/python_mixpy/generators/turtle.js @@ -173,6 +173,21 @@ export const turtle_bgcolor = function (_, generator) { return code; } +export const turtle_title = function (_, generator) { + generator.definitions_.import_turtle = "import turtle"; + const TITLE = generator.valueToCode(this, 'TITLE', generator.ORDER_ASSIGNMENT) || 'Mixly'; + var code = `turtle.title(${TITLE})\n`; + return code; +} + +export const turtle_setup = function (_, generator) { + generator.definitions_.import_turtle = "import turtle"; + const WIDTH = generator.valueToCode(this, 'WIDTH', generator.ORDER_ASSIGNMENT) || '1'; + const HEIGHT = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ASSIGNMENT) || 'None'; + var code = `turtle.setup(width=${WIDTH}, height=${HEIGHT})\n`; + return code; +} + export const turtle_tracer = function (_, generator) { generator.definitions_.import_turtle = "import turtle"; const STEP = generator.valueToCode(this, 'STEP', generator.ORDER_ASSIGNMENT) || '1'; @@ -358,6 +373,13 @@ export const turtle_getscreen = function (_, generator) { return code; } +export const turtle_update = function (_, generator) { + generator.definitions_.import_turtle = "import turtle"; + var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0'; + var code = `${varName}.update()\n`; + return code; +} + export const turtle_onkey = function (_, generator) { generator.definitions_.import_turtle = "import turtle"; var varName = generator.valueToCode(this, 'TUR', generator.ORDER_ASSIGNMENT) || '0'; diff --git a/boards/default_src/python_mixpy/template.xml b/boards/default_src/python_mixpy/template.xml index 811fe224..46c1d15e 100644 --- a/boards/default_src/python_mixpy/template.xml +++ b/boards/default_src/python_mixpy/template.xml @@ -1911,13 +1911,22 @@ - - - - #ff0000 - + + - #FF0000 + Mixly + + + + + + + 800 + + + + + 600 @@ -1934,6 +1943,16 @@ + + + + #ff0000 + + + #FF0000 + + + @@ -2061,6 +2080,13 @@ + + + + screen + + + diff --git a/common/msg/blockly/en.js b/common/msg/blockly/en.js index d5a3fefb..850201bf 100644 --- a/common/msg/blockly/en.js +++ b/common/msg/blockly/en.js @@ -4112,5 +4112,8 @@ En.MIXLY_SOUND_EFFECT_ADD_TOOLTIP='Change sound effect'; En.MIXLY_TURTLE_TRACER = 'Set the drawing refresh rate'; En.MIXLY_TURTLE_TRACER_STEP = 'Number of steps'; En.MIXLY_TURTLE_TRACER_DELAY_MS = 'Delay (milliseconds)'; +En.MIXLY_TURTLE_TITLE_SET = 'Set window title to'; +En.MIXLY_TURTLE_SETUP_SET = 'Set window size'; +En.MIXLY_TURTLE_UPDATE = 'Refresh the canvas'; })(); diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js index eb809bf5..c4e0ea14 100644 --- a/common/msg/blockly/zh-hans.js +++ b/common/msg/blockly/zh-hans.js @@ -4295,5 +4295,8 @@ ZhHans.MIXLY_SOUND_EFFECT_ADD_TOOLTIP='将音效增加'; ZhHans.MIXLY_TURTLE_TRACER = '设置绘图刷新频率'; ZhHans.MIXLY_TURTLE_TRACER_STEP = '步数'; ZhHans.MIXLY_TURTLE_TRACER_DELAY_MS = '延迟 (毫秒)'; +ZhHans.MIXLY_TURTLE_TITLE_SET = '设置窗口标题为'; +ZhHans.MIXLY_TURTLE_SETUP_SET = '设置窗口大小'; +ZhHans.MIXLY_TURTLE_UPDATE = '刷新画布'; })(); \ No newline at end of file diff --git a/common/msg/blockly/zh-hant.js b/common/msg/blockly/zh-hant.js index d83b107e..1a51f9e9 100644 --- a/common/msg/blockly/zh-hant.js +++ b/common/msg/blockly/zh-hant.js @@ -4265,5 +4265,8 @@ ZhHant.MIXLY_SOUND_EFFECT_ADD_TOOLTIP='將音效增加'; ZhHant.MIXLY_TURTLE_TRACER = '設定繪圖刷新頻率'; ZhHant.MIXLY_TURTLE_TRACER_STEP = '步數'; ZhHant.MIXLY_TURTLE_TRACER_DELAY_MS = '延遲 (毫秒)'; +ZhHant.MIXLY_TURTLE_TITLE_SET = '設定視窗標題為'; +ZhHant.MIXLY_TURTLE_SETUP_SET = '設定視窗大小'; +ZhHant.MIXLY_TURTLE_UPDATE = '刷新畫布'; })();