作者归档:admin

好东西Eel 模块【需要安装chrome】

python下的eel。可以结合HTML JS CSS创建UI

1.可以从外界引入css 和JS (CDN),目前bootstrap 和Jquery完全没问题

2.在头部引入 <script type="text/javascript" src="/eel.js"></script> 即可,在JS里面可以调用Python的函数方法,即

eel.say_hello(name)(function(result) {
                document.getElementById("greeting").innerHTML = result;
            });

使用ell.函数名称(传递参数)(function(result) {

document.getElementById(“greeting”).innerHTML = result;

});

(对于python函数返回的结果result处理)

也就是说,该应用的所有网络请求可以在python里面完成,不需要使用AJAX,JS只需要页面交互,其实这样搞个FFMPEG的UI倒是非常简单 233333333333。

其中python 中定义函数需要使用装饰器来暴露这个函数

@eel.expose
def say_hello(name):
    return f"Hello, {name}!"

3.最关键是可以打包成EXE格式

打包当前目录所有文件,且以main.py为运行文件,且不显示命令行

pyinstaller --onefile -w --add-data=".:." main.py

坑点

需要运行端安装Chrome浏览器才能使用,如果使用chrome便携版 则可能无法使用。

解决方法 Chromium Embedded Framework (CEF) 

pip install cefpython3

他仅支持3.9 pass


代码示例

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Eel应用</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
    <!-- eel.js必须引入,这点其实很像wasm模式 -->
    <script type="text/javascript" src="/eel.js"></script>
</head>
<body class="container">
   <h1>欢迎</h1>
   <div class="row">
        <div class="col-md-6"><button class="btn btn-info" id="abc">ABC</button></div>
        <div class="col-md-6">
            <input type="text" id="name" placeholder="请输入你的名字" class="form-control"/>
            <button onclick="sayHello()" class="btn btn-success" id="hello">打招呼</button>
        </div>
   </div>
    
    <div class="row">
        <div id="greeting"></div>
            <button onclick="getJoke()">讲个笑话</button>
            <div id="joke"></div>
    </div>
    

    <script type="text/javascript">
        function sayHello() {
            var name = document.getElementById("name").value;
            eel.say_hello(name)(function(result) {
                document.getElementById("greeting").innerHTML = result;
            });
        }

        function getJoke() {
            eel.get_joke()(function(joke) {
                document.getElementById("joke").innerHTML = joke;
            });
        }
        $("#abc").click(function(){
            var name=prompt("your name?")
            $("#name").val(name)
            $("#hello").click()
        })
    </script>
</body>
</html>

main.py

import eel
import random

# 笑话列表
jokes = [
    "为什么电脑经常生病?因为窗户(Windows)总是开着!",
    "为什么数学书看起来总是很悲伤?因为它里面有太多的问题(problems)",
    "为什么海洋里没有电脑?因为它们总是遇到短路(seals)",
    "为什么冰块感觉很高冷?因为它的幽默感都冻结了。"
]

@eel.expose
def get_joke():
    return random.choice(jokes)

@eel.expose
def say_hello(name):
    return f"Hello, {name}!"

if __name__ == "__main__":
    eel.init(".") #如果是文件夹,就写文件夹名字,我这里html跟python同级
    eel.start("index.html", size=(400, 500))

好好好 现在esp32 可以AI了

首先感谢大佬 cnadler86 的努力,下面是地址:

https://github.com/cnadler86/micropython-camera-API

https://github.com/cnadler86/mp_esp_dl_models

两个 一个是esp32 使用摄像头, 一个用了esp-dl,将两个文件保存到你的esp32编译环境,引入这两个库即可

功能:照片拍摄、JPG图片转RGB、人员追踪、人脸识别(注册)

貌似demo就这么多

好好 大佬都喂饭了,连编译步骤都给你了

git clone https://github.com/cnadler86/mp_esp_dl_models.git
git clone https://github.com/cnadler86/micropython-camera-API.git
git clone https://github.com/cnadler86/mp_jpeg.git


cd boards/
idf.py -D MICROPY_DIR=<micropython-dir> -D MICROPY_BOARD=<BOARD_NAME> -D MICROPY_BOARD_VARIANT=<BOARD_VARIANT> -B build-<your-build-name> build
cd build-<your-build-name>
python ~/micropython/ports/esp32/makeimg.py sdkconfig bootloader/bootloader.bin partition_table/partition-table.bin micropython.bin firmware.bin micropython.uf2

混乱的五月即将告以段路

RT
LUATOS貌似看上去很顺眼,虽然他们家模块有点贵,但是ESP32C3 都可以用
AIR系列的就算了 ,可用用WIFI 显示屏 GB2132,输入输出 我这里就够了,Micropython在LCD上刷汉字还是慢了点。。。。。。。。。。

OK

ML307R 通信无敌 ,UART
股票 炒股大师 233333333

JS用户脚本(油猴脚本)引入外部JS库

因为无法使用script标签,在用户脚本处,引入脚本使用@require

// @require https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/JsBarcode.all.min.js 在脚本运行前将先引入脚本,再执行,如果是创建js标签来引入脚本会再代码执行后才引入,不会对本次执行有影响

// ==UserScript==
// @name         引入外部库示例
// @namespace    http://your-namespace/
// @version      0.1
// @description  示例:在油猴脚本中引入外部 JS 库
// @author       You
// @match        *://*/*
// @require      https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/JsBarcode.all.min.js
// @grant        GM_addStyle
// ==/UserScript==

(function() {
    'use strict';

    // 在这里可以直接使用外部库的功能
    JsBarcode("#barcode", "1234567890123", {
        format: "CODE128",
        fontSize: 12,
        margin: 0,
        height: 20,
        width: 1.5,
        displayValue: true
    });
})();

生成18mmx100mm 条码打印机的条码信息

brother 打印机 使用18mm 打印条码

使用:JsBarcode.all.min.js 生成条码

12mm 条码 80mm长度:12 2 fontsize3
字体 大小 4 ;字体到底部 1mm

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
    <script src="JsBarcode.all.min.js"></script>
</head>
<body>
    
</body>
<script>
function createPrintPage(ht_code) {
  // 创建一个 iframe 用于打印
  const iframe = document.createElement('iframe');
  iframe.style.display = 'none';
  document.body.appendChild(iframe);

  // 设置 iframe 的内容
  const iframeContent = iframe.contentWindow.document;
  iframeContent.open();
  iframeContent.write(`
  <html>
    <head>
      <style>
        @media print {
          @page {
            size: 100mm 18mm;
            margin: 0;
          }
          body {
            margin: 0;
            padding: 0;
            width: 100mm;
            height: 18mm;
          }
          .barcode-container {
            width: 100%;
            height: 100%;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
          }
          .barcode {
            width: 80mm;
            height: 12mm;
          }
          .text {
            position: absolute;
            font-size: 4mm;
            text-align: center;
            width: 100%;
            bottom: 1mm;
            color: black;
          }
        }
      </style>
    </head>
    <body>
      <div class="barcode-container">
        <canvas id="barcode" class="barcode"></canvas>
        <div class="text" id="barcode-text">Sample Barcode</div>
      </div>
    </body>
    </html>
  `);
  iframeContent.close();
  // 使用 JsBarcode 生成条形码
  const barcodeData = ht_code; // 条形码数据
  const barcodeElement = iframeContent.getElementById('barcode');
  const barcodeTextElement = iframeContent.getElementById('barcode-text');
  // 生成条形码
  JsBarcode(barcodeElement, barcodeData, {
    format: "CODE128", // 使用 CODE128 格式
    fontSize: 3,
    margin: 0,
    height: 12,
    width: 2,
    displayValue: false // 不显示条形码下方的文本
  });
  // 设置条形码文本
  barcodeTextElement.textContent = barcodeData;
  // 打印
  iframe.contentWindow.print();
}

// 调用函数生成并打印页面
createPrintPage("HTA101WDCX0320250024");
</script>
</html>