orange3 插件开发知识点积累

一、安装orange3

python版本 3.6.8

pip install orange3

pip install PyQt5

学习官网:OWWidget — Orange Development 3 documentation

The Data — Orange Data Mining Library 3 documentation

Orange Data Mining - Blogs

启动命令:orange-canvas

附上一份python freeze

AnyQt==0.0.10
baycomp==1.0.2
Bottleneck==1.3.2
CacheControl==0.12.6
certifi==2019.11.28
chardet==3.0.4
click==7.1.1
commonmark==0.9.1
config==0.4.2
contextvars==2.4
cycler==0.10.0
dbs==0.0.0
decorator==4.4.2
dictdiffer==0.8.1
dlib==19.8.1
docutils==0.16
easydict==1.9
et-xmlfile==1.0.1
face-recognition==1.3.0
face-recognition-models==0.3.0
graphviz==0.8.4
h11==0.9.0
h2==3.2.0
hpack==3.0.0
hstspreload==2020.5.5
httpx==0.12.1
hyperframe==5.2.0
idna==2.6
imageio==2.8.0
immutables==0.12
importlib-metadata==1.6.0
jdcal==1.4.1
joblib==0.14.1
keyring==21.2.1
keyrings.alt==3.4.0
kiwisolver==1.1.0
lockfile==0.12.2
logger==1.4
matplotlib==3.2.0
msgpack==1.0.0
mxnet==1.6.0
networkx==2.4
numpy==1.16.6
oauthlib==3.1.0
opencv-python==4.2.0.32
openpyxl==3.0.3
openTSNE==0.4.3
orange-canvas-core==0.1.12
orange-widget-base==4.5.0
Orange3==3.25.0
pandas==1.0.3
Pillow==6.2.2
PyMySQL==0.9.3
pyparsing==2.4.6
PyQt5==5.13.2
PyQt5-sip==12.7.1
pyqt5-tools==5.13.2.1.6rc1
pyqtgraph==0.10.0
PyQtWebEngine==5.13.2
python-dateutil==2.8.1
python-dotenv==0.13.0
python-louvain==0.14
pytz==2020.1
PyWavelets==1.1.1
pywin32-ctypes==0.2.0
PyYAML==5.3.1
requests==2.23.0
requests-oauthlib==1.3.0
rfc3986==1.4.0
scikit-image==0.16.2
scikit-learn==0.22.2.post1
scipy==1.4.1
serverfiles==0.3.0
six==1.14.0
sniffio==1.1.0
torch==1.2.0
torchvision==0.4.0
urllib3==1.24.3
xlrd==1.2.0
XlsxWriter==1.2.8
zipp==3.1.0

二、插件开发

参照项目代码  o3dbs 

安装自带插件,在orange3图形化界面  options下Add-ons

import sys
import urllib.parse
import Orange.data
import requests
import json

from Orange.widgets import widget, gui
from Orange.widgets.settings import Setting
from Orange.data import StringVariable
from PyQt5.QtWidgets import QApplication

class OWDbsKeySearch(widget.OWWidget):
    name = "Dbs key Search"
    description = "Randomly selects a subset of instances from the data set"
    icon = "icons/find.svg"
    priority = 10

    # class Outputs:
    #     sample = Output("Data", Orange.data.Table)
    outputs = [("Data", Orange.data.Table)]
    # Basic (convenience) GUI definition:
    #   a simple 'single column' GUI layout
    want_main_area = False
    #   with a fixed non resizable geometry.
    resizing_enabled = False

    ketString = Setting('')

    def __init__(self):
        super().__init__()
        # GUI
        box = gui.widgetBox(self.controlArea, "关键字查询")
        gui.widgetLabel(box, '')

        gui.lineEdit(self.controlArea, self, "ketString", "输入关键字段",
                     orientation="horizontal", box="ketString",
                     # callback=self.set_data,
                     valueType=str)

        # self.set_data()
        gui.button(self.buttonsArea, self, "查询",
                   callback=self.set_data)

    def set_data(self):

        print(self.ketString)

        url = "http://***/dbs/search?keyword=" + urllib.parse.quote(self.ketString.encode('utf-8')) + \
              "&attributes={id,sid,name,value}"

        header = {'Content-Type': 'application/json'}
        try:
            response = requests.get(url, headers=header)
            res = response.text
            res = json.loads(res)
            arr = []
            for i in res:
                for v in res[i]:
                    arr.append([i, res[i][v]['name'], res[i][v]['id'], res[i][v]['sid'],
                                res[i][v]['value']])

            metas = [StringVariable("对象类别"),
                     StringVariable("对象名称"),
                     StringVariable("对象id"),
                     StringVariable("对象sid"),
                     StringVariable("值")]
            domain = Orange.data.Domain([],
                                        metas=metas)
            table = Orange.data.Table.from_list(domain, arr)
            self.send('Data', table)
        except BaseException as e:
            print(e)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = OWDbsKeySearch()
    win.show()
    sys.exit(app.exec_())
import sys
import numpy
import urllib.parse
import Orange.data
import requests
import json
import datetime

from Orange.widgets import widget
from Orange.data import *
from PyQt5.QtWidgets import QApplication


class CsvTable(widget.OWWidget):
    name = "Dbs CsvTable"
    description = "Randomly selects a subset of instances from the data set"
    icon = "icons/scv.svg"
    priority = 10

    # class Outputs:
    #     sample = Output("Data", Orange.data.Table)
    inputs = [("Data", Orange.data.Table, "set_data"), ("Start_Date", str, "set_start_date"),
              ("End_Date", str, "set_end_date"), ("Interval", str, "set_interval")]
    outputs = [("Data", Orange.data.Table)]
    # Basic (convenience) GUI definition:
    #   a simple 'single column' GUI layout
    want_main_area = False

    startTime = ''
    endTime = ''
    inter = ''

    def __init__(self):
        super().__init__()
        self.table = None

    def set_start_date(self, start):
        self.startTime = start

    def set_end_date(self, end):
        self.endTime = end

    def set_interval(self, interval):
        self.inter = interval

    def set_data(self, table):
        self.table = table
        #print(table[0].metas[3])
        print("table行数")
        print(table)
        captions = "{"
        for n in table:
            captions = captions + n.metas[0] + ":" + n.metas[3] + ":value::::" + n.metas[2] + ","
        print(captions)
        captions = captions + "}"
        if self.inter == '':
            self.inter = '5m'
        url = "http://***?captions=" + urllib.parse.quote(captions.encode('utf-8')) + \
              "&interval=" + self.inter

        if self.endTime == '':
            today = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        else:
            today = self.endTime
        if self.startTime == '':
            yesterday = (datetime.datetime.now()+datetime.timedelta(days=-1)).strftime("%Y-%m-%d %H:%M:%S")
        else:
            yesterday = self.startTime

        print('today:' + today)
        print('yesterday:' + yesterday)
        url = url + "&begin=" + yesterday + "&end=" + today
        header = {'Content-Type': 'application/json'}
        try:
            response = requests.get(url, headers=header)
            res = response.text
            res = json.loads(res)
            arr = []
            metas = []
            attributes = []
            print("计算列数:cols")
            cols = len(list(res))  # 计算列数
            print(cols)
            attributes.append(TimeVariable("时间"))
            for i in res:

                attributes.append(ContinuousVariable(i, number_of_decimals=2))
                temp = []
                time = []
                for v in res[i]:
                    datearray = datetime.datetime.fromtimestamp(int(v))
                    otherstyleTime = datearray.strftime("%Y-%m-%d %H:%M:%S")
                    rows = len(list(res[i]))  # 计算行数
                    time.append([otherstyleTime])
                    temp.append([float(res[i][v])])
                if len(arr):
                    arr = numpy.hstack((arr, temp))  # 水平组合
                else:
                    arr = time
                    arr = numpy.hstack((arr, temp))  # 水平组合
            # 数组重排
            # b = numpy.array(arr).reshape(rows, cols*2)

            # 数组切片
            # a = numpy.array(arr)
            # for num in range(cols):
            #     print(num)
            # c = a[0: rows, 0: 2]
            domain = Orange.data.Domain(attributes)
            table = Orange.data.Table.from_list(domain, arr)
            self.send('Data', table)
        except BaseException as e:
            print(e)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = CsvTable()
    win.show()
    sys.exit(app.exec_())
import sys
from Orange.widgets import widget, gui
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QDate,  QDateTime
from Orange.widgets.settings import Setting


class Interval(widget.OWWidget):

    name = "Dbs Interval"
    description = "Select Interval"
    icon = "icons/interval.svg"
    priority = 10

    # class Outputs:
    #     sample = Output("Data", Orange.data.Table)
    outputs = [("Interval", str)]
    # Basic (convenience) GUI definition:
    #   a simple 'single column' GUI layout
    want_main_area = False
    interval = Setting('')

    def __init__(self):
        super(Interval, self).__init__()
        # GUI
        box = gui.widgetBox(self.controlArea, "时间间隔")
        gui.widgetLabel(box, '')

        gui.lineEdit(self.controlArea, self, "interval", "输入时间间隔",
                     orientation="horizontal", box="interval",
                     callback=self.set_data,
                     valueType=str)

    def set_data(self):
        print(self.interval)
        self.send("Interval", self.interval)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Interval()
    demo.show()
    sys.exit(app.exec_())

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OrangePi 5B是一款基于ARM架构的开发板,具有强大的性能和丰富的接口。它采用了全志H616处理器,拥有四个ARM Cortex-A53核心和ARM Mali-G31MP2 GPU。这款开发板支持Android和Linux操作系统,用户可以根据自己的需求选择合适的系统进行开发。 关于OrangePi 5B的开发文档,官方提供了详细的说明和教程,以帮助开发者更好地了解和使用这款开发板。文档主要包括以下几个方面的内容: 1. 硬件介绍:对OrangePi 5B的硬件架构、接口和功能进行详细介绍,包括GPIO、USB、HDMI、以太网等接口的使用方法和规格。 2. 系统安装与配置:介绍如何下载、安装和配置OrangePi 5B所需的操作系统,包括Android和Linux系统的安装步骤和相关设置。 3. 开发环境搭建:提供了在OrangePi 5B上进行开发所需的工具和环境的安装和配置教程,包括交叉编译工具链、开发平台和调试工具的使用方法。 4. 编程接口与示例:介绍了OrangePi 5B所支持的编程接口和开发语言,以及相应的示例代码,帮助开发者快速上手和进行开发。 5. 应用案例与项目文档:提供了一些基于OrangePi 5B开发板的应用案例和项目实战文档,包括物联网、机器人、智能家居等领域的应用示例,帮助开发者更好地应用OrangePi 5B进行项目开发和创新。 总之,OrangePi 5B的开发文档提供了非常详尽和全面的信息,帮助开发者更好地使用和开发这款开发板。无论是初学者还是有经验的开发者,都可以从中获益,并且快速开始开发自己的项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值