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 = '刷新畫布';
})();