0

每当 Python input() 函数在 Skulpt 中运行时,我都想使用 textarea。默认是使用警告框 - 我想使用 textarea 代替。

我试图让它工作,但是当我尝试这个例子时没有任何反应: https ://github.com/skulpt/skulpt/issues/685

其他一切都按我的意愿正常工作。请帮忙!:D

<!DOCTYPE html>
<html lang="en">
<head>
<script src="js/jquery-3.2.1.min.js" type="text/javascript"></script> 
<script src="js/debugger.js" type="text/javascript"></script> 
<script src="js/skulpt.min.js" type="text/javascript"></script>
<script src="js/skulpt-stdlib.js" type="text/javascript"></script> 
<title>i dont like the alert boxes</title>
<style type="text/css" media="screen">
    #source{ 
        position: relative;
        width: 500px;
        height: 300px;
    }
    #console{ 
        position: relative;
        width: 500px;
        height: 100px;
        overflow: scroll;
    }
    body{
        background-color: whitesmoke;
    }
    #turtleCanvas{
        position: relative;
        border: 1px;
        border-color: firebrick;
        border-collapse: collapse;
        border-style: solid;
        width: 500px;
    }
</style>
<script src="js/brython/brython.js" type="text/javascript"></script>
</head>
<body onload="brython()">

<script type="text/javascript"> 
function outf(text) { 
    var mypre = document.getElementById("console"); 
    mypre.innerHTML = mypre.innerHTML + text; 
} 
function builtinRead(x) {
    if (Sk.builtinFiles === undefined || Sk.builtinFiles["files"][x] === undefined)
            throw "File not found: '" + x + "'";
    return Sk.builtinFiles["files"][x];
}

function runit() { 
   var editor = ace.edit("source");
   var code = editor.getValue();
   document.getElementById("hiddenCode").innerHTML = code;
   var prog = document.getElementById("hiddenCode").value; 
   var mypre = document.getElementById("console"); 
   mypre.innerHTML = ''; 
   Sk.pre = "console";
   Sk.configure({output:outf, read:builtinRead}); 
   (Sk.TurtleGraphics || (Sk.TurtleGraphics = {})).target = 'turtleCanvas';
   var myPromise = Sk.misceval.asyncToPromise(function() {
       return Sk.importMainWithBody("<stdin>", false, prog, true);
   });
   myPromise.then(function(mod) {
       console.log('success');
   },
       function(err) {
       console.log(err.toString());
   });
} 
</script>   
<textarea id="hiddenCode" style="display:none;"></textarea><br /> 

<div id="source">import turtle
myName = input("who r u?")
print(myName)
t = turtle.Turtle()
t.forward(100)</div>
<button type="button" onclick="runit()">Run</button> 
    <textarea id="programInputField">some input lines</textarea>
<pre id="console">output</pre>
<div id="turtleCanvas"></div>   
<script src="js/ace/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
<script>
    var window1 = ace.edit("source");
    var window2 = ace.edit("console");
    window1.setTheme("ace/theme/textmate");
    window2.setTheme("ace/theme/twilight");
    window1.getSession().setMode("ace/mode/python");
</script>
</body>

4

1 回答 1

0

没关系!!!!这很完美,只需要更改我的文本区域的 id,否则我只是复制并粘贴它并注释掉我自己的 sk.configure 行.....太棒了,谢谢你!!!!!!!:D :D :D :D

在 Javascript for Skulpt 的函数中等待事件发生

于 2018-03-05T10:24:40.437 回答