iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >scratch3.0二次开发之用blocks生成python代码
  • 617
分享到

scratch3.0二次开发之用blocks生成python代码

2024-04-02 19:04:59 617人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、引入一个生成代码的文件二、定义生成的python代码1、获取block的type2、获取参数的值3、从xml来解析一个块的组成结构三、生成Python代码四、结语在开始之前,

在开始之前,先回顾下之前写的文章《scratch3.0二次开发之blocks生成代码思路》,在文章里大概地写了生成代码的几个步骤,读者看了可能还不太理解,这是根据我的开发经验写出来的。现在具体写写实现的方法。

一、引入一个生成代码的文件

比如要生成arduino代码,就要引入生成arduino代码的文件,要生成python代码,就要引入python文件。

这个生成代码的文件是从Blockly引入进来的,scratch-blocks是在blockly的基础上开发出来的。现在的scratch-blocks是没有generators目录的,这个也可以从blockly那里copy过来。
具体分析blockly的python.js代码:


Blockly.Python = new Blockly.Generator('Python');

python是blockl.generator的一个实例,会调用generator里的方法;


Blockly.Python.addReservedWords(...);

这方法的作用是给python添加关键字,blockly的python文件已经设置了许多python的关键字在里面了。


Blockly.Python.ORDER_ATOMIC = 0;            // 0 "" ...
Blockly.Python.ORDER_COLLECTioN = 1;        // tuples, lists, dictionaries
Blockly.Python.ORDER_STRING_CONVERSION = 1; // `expression...`
Blockly.Python.ORDER_MEMBER = 2.1;          // . []
Blockly.Python.ORDER_FUNCTION_CALL = 2.2;   // ()
Blockly.Python.ORDER_EXPONENTIATION = 3;    // **
Blockly.Python.ORDER_UNARY_SIGN = 4;        // + -
Blockly.Python.ORDER_BITWISE_NOT = 4;       // ~
Blockly.Python.ORDER_MULTIPLICATIVE = 5;    // * / // %
Blockly.Python.ORDER_ADDITIVE = 6;          // + -
Blockly.Python.ORDER_BITWISE_SHIFT = 7;     // << >>
Blockly.Python.ORDER_BITWISE_AND = 8;       // &
Blockly.Python.ORDER_BITWISE_XOR = 9;       // ^
Blockly.Python.ORDER_BITWISE_OR = 10;       // |
Blockly.Python.ORDER_RELATIONAL = 11;       // in, not in, is, is not,
                                            //     <, <=, >, >=, <>, !=, ==
Blockly.Python.ORDER_LOGICAL_NOT = 12;      // not
Blockly.Python.ORDER_LOGICAL_AND = 13;      // and
Blockly.Python.ORDER_LOGICAL_OR = 14;       // or
Blockly.Python.ORDER_CONDITIONAL = 15;      // if else
Blockly.Python.ORDER_LAMBDA = 16;           // lambda
Blockly.Python.ORDER_NONE = 99;             // (...)

以上代码设置了优先级。
Blockly.python的其他方法请参考blockly的python文件。

二、定义生成的python代码

需要对每个block定义生成的代码。

1、获取block的type

block是根据type来区分的,每个block的type是唯一的。scratch-blocks的基本blocks的定义是在scratch-blocks\blocks_vertical目录里。
具体可以查阅之前的博客《scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法》

以下是一个type为“motion_movesteps”的block块的定义

在这里插入图片描述


Blockly.Blocks['motion_movesteps'] = {
  
  init: function() {
    this.JSONInit({
      "message0": Blockly.Msg.MOTION_MOVESTEPS,
      "args0": [
        {
          "type": "input_value",
          "name": "STEPS"
        }
      ],
      "cateGory": Blockly.Categories.motion,
      "extensions": ["colours_motion", "shape_statement"]
    });
  }
};

定义生成的python语句:


 Blockly.Python['motion_movesteps'] = function (block) {
        var steps = Blockly.Python.valueToCode(block, "STEPS", Blockly.Python.ORDER_NONE);
        return 'move ' + steps + ' steps\n';
    };

2、获取参数的值

根据参数的类型,选择Blockly.Python.valueToCode、block.getFieldValue还是Blockly.Python.statementToCode来获取值。

type类型 方法
input_value Blockly.Python.valueToCode
input_statement Blockly.Python.statementToCode
field_* block.getFieldValue

3、从xml来解析一个块的组成结构

这是motion_movesteps块的xml结构,它由两个block组成,"motion_movesteps"和“math_number”,shadow也是一个block;


<block type="motion_movesteps">
            <value name="STEPS">
                <shadow type="math_number">
                    <field name="NUM">10</field>
                </shadow>
            </value>
        </block>

所以除了上面已经定义好的"motion_movesteps"生成python语句,还需要的定义math_number的生成语句


Blockly.Python['math_number'] = function(block) {
  // Numeric value.
  var code = parseFloat(block.getFieldValue('NUM'));
  var order;
  if (code == Infinity) {
    code = 'float("inf")';
    order = Blockly.Python.ORDER_FUNCTION_CALL;
  } else if (code == -Infinity) {
    code = '-float("inf")';
    order = Blockly.Python.ORDER_UNARY_SIGN;
  } else {
    order = code < 0 ? Blockly.Python.ORDER_UNARY_SIGN :
            Blockly.Python.ORDER_ATOMIC;
  }
  return [code, order];
}

4、根据块的形状来设置return的数据类型

形状 return的类型
字符串
字符串
[code, order] 数组
[code, order] 数组

引入模块:Blockly.Python.definitions_[模块名] = ”import xxxx";
声明函数:Blockly.Python.definitions_[模块名] = ”def xxx …";

在这里插入图片描述

三、生成python代码

在scratch-gui/src/containers/block.jsx文件中,对workspace添加监听


 this.workspace.addChangeListener(this.generatPythonCode);

四、结语

本文主要介绍了blocks生成python代码的方法,由于篇幅有限,写的也不是很全面,不过大概地生成方法也就这些。如果在开发地过程中碰到问题,可以私信我给我留言,我尽可能地帮助大家解决问题

到此这篇关于scratch3.0二次开发之用blocks生成python代码的文章就介绍到这了,更多相关scratch blocks生成python代码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: scratch3.0二次开发之用blocks生成python代码

本文链接: https://www.lsjlt.com/news/132510.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • scratch3.0二次开发之用blocks生成python代码
    目录一、引入一个生成代码的文件二、定义生成的python代码1、获取block的type2、获取参数的值3、从xml来解析一个块的组成结构三、生成python代码四、结语在开始之前,...
    99+
    2024-04-02
  • 解析scratch3.0二次开发之scratch-blocks免编译修改问题
    scratch-blocks编译的时候会出现的问题:scratch-gui依赖的scratch-blocks模块在安装的时候编译会报错。 原因:scratch-blocks编译时要...
    99+
    2024-04-02
  • 详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法
    scratch-blocks是scratch-gui依赖的一个基本模块。它的作用是生成gui界面上的blocks。(有关scratch-blocks的方法可以看我上一篇博客《scra...
    99+
    2024-04-02
  • Scratch3.0二次开发之windows环境下打包成exe的流程
    先给大家看下Scratch3.0二次开发之windows环境下打包成exe的流程。 1、需要先安装npm,安装过程不作过多介绍了。  2、直接介绍打包成exe流程。 (1)...
    99+
    2024-04-02
  • 如何使用Python开发高效的二维码生成器?
    二维码(QR Code)是一种矩阵条码,它可以储存很多信息,包括文字、链接、电话号码等等。在现代社会中,二维码已经成为一种非常重要的信息传递工具。在本文中,我们将介绍如何使用Python开发高效的二维码生成器。 安装QRCode库 在...
    99+
    2023-09-08
    二维码 开发技术 索引
  • 如何使用Java开发二维码生成器?
    Java是一种非常流行的编程语言,广泛应用于各种应用程序的开发。其中,二维码生成器是Java应用程序中非常常用的一种工具,可以帮助开发人员快速生成二维码图片,以便用于各种用途。本文将介绍如何使用Java开发二维码生成器。 一、二维码生成器的...
    99+
    2023-09-18
    二维码 开发技术 对象
  • python应用之qrcode生成二维码的示例
    本文将为大家详细介绍“python应用之qrcode生成二维码的示例”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“python应用之qrcode生成二维码的示例”能够给你意想不到的收获,请大家跟着小编的思路慢...
    99+
    2023-06-06
  • Java开发技术如何生成二维码?
    Java是一种广泛应用于企业级开发的编程语言,而生成二维码是Java开发中经常遇到的需求之一。在本文中,我们将介绍Java开发中生成二维码的技术和方法,并通过演示代码来说明这些技术和方法的具体实现。 一、二维码的基础知识 在介绍如何生成二维...
    99+
    2023-08-17
    文件 开发技术 二维码
  • 如何用Python生成二维码、解析二维码
    目录楔子生成二维码qrcodeMyQR解析二维码楔子 二维码在我们的生活中可以说是必不可少的,不单单是手机支付、其它很多地方也都需要扫描二维码。那么下面我们就来看看如何使用pyth...
    99+
    2024-04-02
  • 如何使用 Python 生成二维码?
    随着移动设备的普及,二维码已经成为了一种非常方便的信息传递方式。在本文中,我们将介绍如何使用 Python 生成二维码。 Python 是一种非常流行的编程语言,它有着强大的功能和广泛的应用场景。使用 Python 生成二维码非常简单,只...
    99+
    2023-08-27
    二维码 bash npm
  • Python实现动态二维码生成的示例代码
    目录1.MyQR普通的二维码制作带背景图片的二维码制作带动图背景的二维码制作2.qrcode简单的二维码制作带背景图片的二维码制作大家好,我是辰哥~ 今天给大家分享两个制作二维码的P...
    99+
    2024-04-02
  • Python一行代码实现生成和读取二维码
    目录生成二维码读取二维码补充总结二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形。 二维码被称为快速响应码,可能看起来很简单,但它...
    99+
    2024-04-02
  • PHP开发技术:如何使用二维码生成器创建二维码数组?
    随着移动互联网的飞速发展,二维码已经成为一种非常方便的信息传递方式,因为它可以存储大量的信息,并且可以在移动设备上方便地扫描和识别。在PHP开发中,我们可以使用二维码生成器来创建二维码数组,本文将介绍如何使用PHP二维码生成器来创建二维码...
    99+
    2023-06-02
    开发技术 二维码 数组
  • Dcat Admin 入门应用(二)代码生成器
    一、代码生成器 在日常开发中,我们可以用代码生成器一键生成增删改查页面代码,非常的方便快捷。 1、一键生成增删改查页面 1.1、将项目的APP_DEBUG开起(true),打开项目即可看到侧边栏的开发工具菜单,打开代码生成器; 1.2...
    99+
    2024-04-02
  • Python开发之迭代器&生成器的实战案例分享
    目录迭代器&生成器实战案例迭代器&生成器 在 Python 中,迭代器和生成器都是用来遍历数据集合的工具,可以按需逐个生成或返回数据,从而避免一次性加载整个数据集合所...
    99+
    2023-05-16
    Python迭代器 生成器开发 Python迭代器 生成器 Python迭代器 Python生成器
  • 如何在Java开发中使用关键字生成二维码?
    如何在Java开发中使用关键字生成二维码? 二维码在现代社会已经是非常常见的一种信息传递方式,它可以将各种信息以图形化的方式展现出来,方便人们在生活和工作中使用。Java是一门非常流行的编程语言,那么如何在Java开发中使用关键字生成二维码...
    99+
    2023-11-01
    ide 二维码 关键字
  • PHP开发技术:对象的运用在二维码生成中
    二维码在我们的生活中越来越常见,它可以快速地传递信息并且具有很高的可读性。在实际应用中,我们通常使用PHP来生成二维码。在PHP中,使用对象的方式来生成二维码可以更加方便和灵活。本文将介绍如何使用对象的方式来生成二维码。 一、生成二维码 ...
    99+
    2023-07-08
    二维码 开发技术 对象
  • 二维码生成技术如何应用于ASP网站开发?
    随着互联网的发展,二维码已经成为了一种不可或缺的工具。二维码可以被扫描,用于传递信息或链接到网站。在ASP网站开发中,二维码生成技术也可以被应用,为用户提供更好的体验。本文将介绍如何在ASP网站中应用二维码生成技术。 一、什么是二维码? ...
    99+
    2023-09-24
    二维码 bash numpy
  • 从零开始:Go 语言、Linux 系统、二维码生成、并发处理,一次性解决!
    Go 语言是一种由 Google 开发的开源编程语言,因其简洁、高效、并发特性而受到越来越多开发者的青睐。在本文中,我们将结合 Linux 系统,使用 Go 语言编写一个二维码生成工具,并实现并发处理,让你轻松解决二维码生成的问题。 安...
    99+
    2023-09-21
    linux 二维码 并发
  • PHP开发者必备:使用Git和二维码生成器实现代码同步的技巧。
    PHP开发者必备:使用Git和二维码生成器实现代码同步的技巧 在进行PHP开发的过程中,代码的同步是一个非常重要的环节。在多人协作开发的情况下,更是不可或缺。为了解决这个问题,我们可以使用Git和二维码生成器来实现代码同步。本文将为大家介绍...
    99+
    2023-06-29
    git 二维码 同步
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作