最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

scratch3.0二次開發(fā)之用blocks生成python代碼

 更新時間:2021年08月13日 11:13:15   作者:取個昵稱就那么難  
python是blockl.generator的一個實例,會調(diào)用generator里的方法,這篇文章主要介紹了scratch3.0二次開發(fā)之用blocks生成python代碼,需要的朋友可以參考下

在開始之前,先回顧下之前寫的文章《scratch3.0二次開發(fā)之blocks生成代碼思路》,在文章里大概地寫了生成代碼的幾個步驟,讀者看了可能還不太理解,這是根據(jù)我的開發(fā)經(jīng)驗寫出來的。現(xiàn)在具體寫寫實現(xiàn)的方法。

一、引入一個生成代碼的文件

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

這個生成代碼的文件是從Blockly引入進(jìn)來的,scratch-blocks是在blockly的基礎(chǔ)上開發(fā)出來的?,F(xiàn)在的scratch-blocks是沒有g(shù)enerators目錄的,這個也可以從blockly那里copy過來。
具體分析blockly的python.js代碼:

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

python是blockl.generator的一個實例,會調(diào)用generator里的方法;

Blockly.Python.addReservedWords(...);

這方法的作用是給python添加關(guān)鍵字,blockly的python文件已經(jīng)設(shè)置了許多python的關(guān)鍵字在里面了。

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;             // (...)

以上代碼設(shè)置了優(yōu)先級。
Blockly.python的其他方法請參考blockly的python文件。

二、定義生成的python代碼

需要對每個block定義生成的代碼。

1、獲取block的type

block是根據(jù)type來區(qū)分的,每個block的type是唯一的。scratch-blocks的基本blocks的定義是在scratch-blocks\blocks_vertical目錄里。
具體可以查閱之前的博客《scratch3.0二次開發(fā)之scratch-blocks中的blocks的類型、定義和使用方法

以下是一個type為“motion_movesteps”的block塊的定義

在這里插入圖片描述

Blockly.Blocks['motion_movesteps'] = {
  /**
   * Block to move steps.
   * @this Blockly.Block
   */
  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、獲取參數(shù)的值

根據(jù)參數(shù)的類型,選擇Blockly.Python.valueToCode、block.getFieldValue還是Blockly.Python.statementToCode來獲取值。

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

3、從xml來解析一個塊的組成結(jié)構(gòu)

這是motion_movesteps塊的xml結(jié)構(gòu),它由兩個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>

所以除了上面已經(jīng)定義好的"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、根據(jù)塊的形狀來設(shè)置return的數(shù)據(jù)類型

形狀 return的類型
字符串
字符串
[code, order] 數(shù)組
[code, order] 數(shù)組

引入模塊:Blockly.Python.definitions_[模塊名] = ”import xxxx";
聲明函數(shù):Blockly.Python.definitions_[模塊名] = ”def xxx …";

在這里插入圖片描述

三、生成python代碼

在scratch-gui/src/containers/block.jsx文件中,對workspace添加監(jiān)聽

 this.workspace.addChangeListener(this.generatPythonCode);

四、結(jié)語

本文主要介紹了blocks生成python代碼的方法,由于篇幅有限,寫的也不是很全面,不過大概地生成方法也就這些。如果在開發(fā)地過程中碰到問題,可以私信我給我留言,我盡可能地幫助大家解決問題

到此這篇關(guān)于scratch3.0二次開發(fā)之用blocks生成python代碼的文章就介紹到這了,更多相關(guān)scratch blocks生成python代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python中元組的三個不常用特性

    詳解Python中元組的三個不常用特性

    元組是Python中一種重要的內(nèi)置數(shù)據(jù)類型。與列表一樣,我們經(jīng)常使用元組將多個對象保存為相應(yīng)的數(shù)據(jù)容器。本文為大家總結(jié)了元組的三個不常用特性,感興趣的小伙伴可以了解一下
    2022-07-07
  • python如何發(fā)送xml格式請求數(shù)據(jù)

    python如何發(fā)送xml格式請求數(shù)據(jù)

    這篇文章主要介紹了python如何發(fā)送xml格式請求數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python給exe添加以管理員運行的屬性方法詳解

    Python給exe添加以管理員運行的屬性方法詳解

    這篇文章主要為大家介紹了Python給exe添加以管理員運行的屬性方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 簡化Python的Django框架代碼的一些示例

    簡化Python的Django框架代碼的一些示例

    這篇文章主要介紹了簡化Python的Django框架代碼的一些示例,實際上文中只是抽取了一些Django中最基本的功能用于簡化入門者的上手復(fù)雜度,下,需要的朋友可以參考下
    2015-04-04
  • python實現(xiàn)排序算法

    python實現(xiàn)排序算法

    這篇文章主要介紹了python實現(xiàn)排序算法,處理小序列不錯,需要的朋友可以參考下
    2014-02-02
  • Python手繪可視化工具cutecharts使用實例

    Python手繪可視化工具cutecharts使用實例

    這篇文章主要介紹了Python手繪可視化工具cutecharts使用實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Python使用Tesseract實現(xiàn)從圖像中讀取文本

    Python使用Tesseract實現(xiàn)從圖像中讀取文本

    Tesseract?是一個基于計算機的系統(tǒng),用于光學(xué)字符識別?(OCR)?和其他圖像到文本處理,本文將介紹如何使用?Python?中的?Tesseract?創(chuàng)建一個可以從圖像中讀取文本的程序,需要的可以參考下
    2023-11-11
  • 一文讀懂Python的’=='和’is’用法

    一文讀懂Python的’=='和’is’用法

    探索Python世界的'=='與'is',一個看似簡單卻隱藏玄機的話題,本指南將帶你輕松讀懂它們背后的故事,解鎖編程中的這道難題,開始我們的快速之旅,釋放代碼的潛能吧!
    2024-01-01
  • Python實現(xiàn)動態(tài)生成系統(tǒng)數(shù)據(jù)庫設(shè)計到Word文檔

    Python實現(xiàn)動態(tài)生成系統(tǒng)數(shù)據(jù)庫設(shè)計到Word文檔

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實現(xiàn)填寫相關(guān)數(shù)據(jù)庫信息后,生成系統(tǒng)數(shù)據(jù)庫設(shè)計到word文檔,文中示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06
  • Python下使用Trackbar實現(xiàn)繪圖板

    Python下使用Trackbar實現(xiàn)繪圖板

    這篇文章主要為大家詳細(xì)介紹了Python下使用Trackbar實現(xiàn)繪圖板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評論

大名县| 桐城市| 禹州市| 四会市| 秦皇岛市| 鄂伦春自治旗| 启东市| 乐都县| 南乐县| 漳州市| 疏附县| 西青区| 尚义县| 吴江市| 高碑店市| 德清县| 宜黄县| 晋中市| 大化| 若尔盖县| 望城县| 乌海市| 潢川县| 龙海市| 若尔盖县| 东宁县| 昭通市| 海原县| 来安县| 揭阳市| 磐石市| 德保县| 石门县| 梅州市| 武胜县| 江油市| 关岭| 石楼县| 会理县| 浮山县| 色达县|