Giter VIP home page Giter VIP logo

51bitquant / howtrader Goto Github PK

View Code? Open in Web Editor NEW
638.0 22.0 277.0 1.13 MB

Howtrader: A crypto quant framework for developing, backtesting, and executing your own trading strategies. Seamlessly integrates with TradingView and other third-party signals. Simply send a post request to automate trading and order placement. Supports Binance and Okex exchanges.

License: MIT License

Python 99.93% Shell 0.01% Dockerfile 0.07%
51bitquant vnpy cryptocurrency bitcoin eth quantitative algo trading python trader

howtrader's People

Contributors

51bitquant avatar fimh avatar hatawong avatar koujun2012 avatar xcycharles avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

howtrader's Issues

PortfolioStrategyApp不能正常使用的问题

背景:希望在策略中订阅多个交易对的信息,cta策略不能支持;尝试使用PortfolioStrategyApp模块,不能正常使用。
暂时的处理:发现主要原因是以下库的缺失:from howtrader.trader.datafeed import BaseDatafeed, get_datafeed。故将代码中的 BaseDatafeed去掉,通过ui成功点进PortfolioStrategyApp模块,script端未测试。
问题:这样子的魔改是否可以正常使用PortfolioStrategyApp模块;魔改代码前该模块不能运行,是因为笔误文件缺失,还是因为什么原因将该模块移除呢?
以上,望解答

使用新增的okx接口,登录时调用query_open_orders函数,总是报超时的错误

登录时会调用query_open_orders函数,总是报错超时,初步debug发现是sign中的msg不对,修改sign函数如下
def sign(self, request: Request) -> Request:
"""signature"""

    now: datetime = datetime.utcnow()
    now = now - timedelta(milliseconds=self.time_offset_ms)
    timestamp: str = now.isoformat("T", "milliseconds") + "Z"


    if request.params:
        path: str = request.path + "?" + urlencode(request.params)
    else:
        path: str = request.path

    if request.data:
        request.data = json.dumps(request.data)
        msg: str = timestamp + request.method + path + request.data
    else:
        msg: str = timestamp + request.method + path

    signature: bytes = generate_signature(msg, self.secret)

问题依然没有解决,怀疑取到timestamp之后过了很久才向服务器发送请求

第6课运行 main.py 的时候报错

您好,我在class 6 运行main.py 的时候报错,麻烦帮着看看,谢谢。
(mytrader) PS E:\07个人材料\量化学习\19bitquant\VNPY数字货币量化交易从零到实盘\course_codes-main\class_06> python main.py
Traceback (most recent call last):
File "F:\anaconda\envs\mytrader\lib\site-packages\aiohttp\client_reqrep.py", line 70, in
import cchardet as chardet
ModuleNotFoundError: No module named 'cchardet'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "E:\07个人材料\量化学习\19bitquant\VNPY数字货币量化交易从零到实盘\course_codes-main\class_06\main.py", line 7, in
from howtrader.gateway.binance import BinanceUsdtGateway, BinanceSpotGateway, BinanceInverseGateway
File "F:\anaconda\envs\mytrader\lib\site-packages\howtrader\gateway\binance_init_.py", line 1, in
from .binance_spot_gateway import BinanceSpotGateway
File "F:\anaconda\envs\mytrader\lib\site-packages\howtrader\gateway\binance\binance_spot_gateway.py", line 41, in
from howtrader.api.rest import RestClient, Request, Response
File "F:\anaconda\envs\mytrader\lib\site-packages\howtrader\api\rest_init_.py", line 1, in
from .rest_client import RestClient, Request, Response
File "F:\anaconda\envs\mytrader\lib\site-packages\howtrader\api\rest\rest_client.py", line 19, in
from aiohttp import ClientSession, ClientResponse
File "F:\anaconda\envs\mytrader\lib\site-packages\aiohttp_init_.py", line 6, in
from .client import (
File "F:\anaconda\envs\mytrader\lib\site-packages\aiohttp\client.py", line 59, in
from .client_reqrep import (
File "F:\anaconda\envs\mytrader\lib\site-packages\aiohttp\client_reqrep.py", line 72, in
import charset_normalizer as chardet # type: ignore[no-redef]
File "F:\anaconda\envs\mytrader\lib\site-packages\charset_normalizer_init_.py", line 23, in
from charset_normalizer.api import from_fp, from_path, from_bytes, normalize
File "F:\anaconda\envs\mytrader\lib\site-packages\charset_normalizer\api.py", line 10, in
from charset_normalizer.md import mess_ratio
AttributeError: partially initialized module 'charset_normalizer' has no attribute 'md__mypyc' (most likely due to a circular import)

按教程安装的qt报错,找不到问题在哪,请指教!

Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\learnhowtrader\main_window.py", line 80, in
main()
File "C:\Users\Administrator\Desktop\learnhowtrader\main_window.py", line 52, in main
qapp = create_qapp()
File "C:\ProgramData\Anaconda3\envs\mytrader\lib\site-packages\howtrader\trader\ui\qt.py", line 28, in create_qapp
qapp.setStyleSheet(qdarkstyle.load_stylesheet(qt_api="pyside6"))
File "C:\ProgramData\Anaconda3\envs\mytrader\lib\site-packages\qdarkstyle_init_.py", line 364, in load_stylesheet
stylesheet = load_stylesheet(qt_api=qt_api, palette=palette)
File "C:\ProgramData\Anaconda3\envs\mytrader\lib\site-packages\qdarkstyle_init
.py", line 237, in _load_stylesheet
from qtpy.QtCore import QCoreApplication, QFile, QTextStream
File "C:\ProgramData\Anaconda3\envs\mytrader\lib\site-packages\qtpy\QtCore.py", line 116, in
Qt.MidButton = Qt.MouseButton.MiddleButton = Qt.MiddleButton
File "shibokensupport/enum_310.py", line 529, in setattr
AttributeError: Cannot reassign members.

可以支持“双向持仓模式“吗

51bitquant老师,您好

在您的"howtrader-gateway-binance_usdt_gateway.py"文件里有一个on_query_position_side()函数,具体代码如下:

def on_query_position_side(self, data: dict, request: Request) -> None:

if data.get("dualSidePosition", False): # true will means dual position side

self.set_position_side() # set dualSidePosition to False

这段代码表示如果我原先的dualSidePosition为True的话也会通过set_position_side()函数被设置成False, 我想请教一下howtrader是否支持双向持仓模式呢?因为有的时候策略需要在同一个标的上持有反向仓位(同时持有一个多仓和一个空仓),而在单向持仓模式下就会变成不持有任何方向上的仓位。

提前感谢您的回答,
祝好~~~

启动图形化界面后,会不停的403 forbidden错误

您好,在我启动图形化界面后,成功连接现货和合约账号后,在pycharm的运行界面会一直报错,如下图,同时不能够获取交易对的行情和下单,symbol那一项点不动,无法输入。
image

最开始以为是代理的问题,但使用这个代理能够在shell里ping通api.binancn.com

VNPY更新

请问如何在Ubuntu下更新VNPY版本?

python main.py启动似乎异常

您好,我使用的操作系统是ubuntu20.04 server版本的,安装过程参考您的文档,最后启动的是这样的,这样是正常的吗
image
image

回测时遇到了问题,提示如下

17:30:06 策略初始化完成
17:30:06 策略回测失败,触发异常:
Traceback (most recent call last):
File "D:\Anaconda\envs\vnpy\lib\site-packages\howtrader\app\cta_backtester\engine.py", line 161, in run_backtesting
engine.run_backtesting()
File "D:\Anaconda\envs\vnpy\lib\site-packages\howtrader\app\cta_strategy\backtesting.py", line 295, in run_backtesting
self.strategy.on_start()
File "D:\Anaconda\envs\vnpy\lib\site-packages\howtrader\app\cta_strategy\strategies\spot_simple_grid_strategy.py", line 64, in on_start
self.cta_engine.event_engine.register(EVENT_TIMER, self.process_timer_event)
AttributeError: 'BacktestingEngine' object has no attribute 'event_engine'

cannot import name 'get_localzone_name' from 'tzlocal' 老师麻烦问下这个问题怎么解决 谢谢

C:\Users\admin\anaconda3\envs\howtrader-main\python.exe C:/Users/admin/strategies/btctest.py Traceback (most recent call last): File "C:\Users\admin\strategies\btctest.py", line 1, in <module> from howtrader.app.cta_strategy import ( File "E:\howtrader-main\howtrader\app\cta_strategy\__init__.py", line 4, in <module> from .base import APP_NAME, StopOrder File "E:\howtrader-main\howtrader\app\cta_strategy\base.py", line 11, in <module> from howtrader.trader.constant import Direction, Offset, Interval File "E:\howtrader-main\howtrader\trader\constant.py", line 7, in <module> from tzlocal import get_localzone_name ImportError: cannot import name 'get_localzone_name' from 'tzlocal' (C:\Users\admin\anaconda3\envs\howtrader-main\lib\site-packages\tzlocal\__init__.py)

send_order失败后的处理(没有重试?)

hello,我看到很多基础下单函数(buy、short等)最后都会调用send_order函数。而send_order如果失败(eg. Timestamp for this request is outside of the recvWindow.),好像并不会重试,这块有考虑过优化吗。

回测导入日K线,会出现丢失数据的情况。

1。开始时间为20190102,这种情况会丢失20192/1、2019/3/4、2019/4/4、2019/5/5等数据,每隔30天丢失一下。
engine.set_parameters(
vt_symbol="btcusdt.BINANCE", #交易的标的, 现货的数据
interval=Interval.DAILY,
start=datetime(2019,1,2), # 开始时间
end=datetime(2020,7,1), # 结束时间
rate=1/1000, # 手续费, 币安手续费千分之1, BNB 万7.5 7.5/10000
slippage=0, # 交易滑点
size=1, # 合约乘数
pricetick=0.01, # 价格精度.
capital=1_000_000) # 初始资金

2。开始时间为20190101,这种情况会丢失2019/1/31、2019/3/3、2019/4/3、2019/5/4等数据,每隔30天丢失一下。
engine.set_parameters(
vt_symbol="btcusdt.BINANCE", #交易的标的, 现货的数据
interval=Interval.DAILY,
start=datetime(2019,1,1), # 开始时间
end=datetime(2020,7,1), # 结束时间
rate=1/1000, # 手续费, 币安手续费千分之1, BNB 万7.5 7.5/10000
slippage=0, # 交易滑点
size=1, # 合约乘数
pricetick=0.01, # 价格精度.
capital=1_000_000) # 初始资金

mainengine

mainengine主引擎代码中少了一个get_contract的方法,converter.py里就有调用主引擎的get_contract方法

ImportError: cannot import name 'get_localzone_name' from 'tzlocal' (C:\QGB\Anaconda3\lib\site-packages\tzlocal\__init__.py)

In [199]: pip install git+https://github.com/51bitquant/howtrader.git
Collecting git+https://github.com/51bitquant/howtrader.git
  Cloning https://github.com/51bitquant/howtrader.git to c:\users\qgb\appdata\local\temp\pip-req-build-ylsqf3y3
  Running command git clone -q https://github.com/51bitquant/howtrader.git 'C:\Users\qgb\AppData\Local\Temp\pip-req-build-ylsqf3y3'
Collecting simplejson
  Downloading simplejson-3.18.3-cp37-cp37m-win_amd64.whl (74 kB)
     |████████████████████████████████| 74 kB 126 kB/s
Requirement already satisfied: flask in c:\qgb\anaconda3\lib\site-packages (from howtrader==3.3.0) (1.1.1)
Collecting PySide6
  Downloading PySide6-6.4.2-cp37-abi3-win_amd64.whl (7.2 kB)
Collecting pyqtgraph
  Downloading pyqtgraph-0.12.4-py3-none-any.whl (995 kB)
     |████████████████████████████████| 995 kB 251 kB/s
Collecting qdarkstyle
  Downloading QDarkStyle-3.1-py2.py3-none-any.whl (870 kB)
     |████████████████████████████████| 870 kB 152 kB/s
Requirement already satisfied: requests in c:\qgb\anaconda3\lib\site-packages (from howtrader==3.3.0) (2.25.1)
Requirement already satisfied: aiohttp in c:\users\qgb\appdata\roaming\python\python37\site-packages (from howtrader==3.3.0) (3.6.2)
Requirement already satisfied: pytz in c:\qgb\anaconda3\lib\site-packages (from howtrader==3.3.0) (2021.3)
Collecting peewee
  Downloading peewee-3.15.4.tar.gz (860 kB)
     |████████████████████████████████| 860 kB 163 kB/s
Collecting pymongo
  Downloading pymongo-4.3.3-cp37-cp37m-win_amd64.whl (382 kB)
     |████████████████████████████████| 382 kB 285 kB/s
Requirement already satisfied: numpy in c:\qgb\anaconda3\lib\site-packages (from howtrader==3.3.0) (1.21.6)
Requirement already satisfied: pandas in c:\qgb\anaconda3\lib\site-packages (from howtrader==3.3.0) (0.25.3)
Requirement already satisfied: matplotlib in c:\qgb\anaconda3\lib\site-packages (from howtrader==3.3.0) (3.5.1)
Collecting seaborn
  Downloading seaborn-0.12.2-py3-none-any.whl (293 kB)
     |████████████████████████████████| 293 kB 261 kB/s
Collecting deap
  Downloading deap-1.3.3-cp37-cp37m-win_amd64.whl (108 kB)
     |████████████████████████████████| 108 kB 225 kB/s
Requirement already satisfied: tzlocal in c:\qgb\anaconda3\lib\site-packages (from howtrader==3.3.0) (2.0.0)
Collecting plotly
  Downloading plotly-5.13.0-py2.py3-none-any.whl (15.2 MB)
     |████████████████████████████████| 15.2 MB 656 kB/s
Requirement already satisfied: importlib-metadata in c:\users\qgb\appdata\roaming\python\python37\site-packages (from howtrader==3.3.0) (4.12.0)
Requirement already satisfied: Jinja2>=2.10.1 in c:\qgb\anaconda3\lib\site-packages (from flask->howtrader==3.3.0) (2.10.3)
Requirement already satisfied: itsdangerous>=0.24 in c:\qgb\anaconda3\lib\site-packages (from flask->howtrader==3.3.0) (1.1.0)
Requirement already satisfied: Werkzeug>=0.15 in c:\qgb\anaconda3\lib\site-packages (from flask->howtrader==3.3.0) (0.16.0)
Requirement already satisfied: click>=5.1 in c:\qgb\anaconda3\lib\site-packages (from flask->howtrader==3.3.0) (8.1.3)
Collecting PySide6-Essentials==6.4.2
  Downloading PySide6_Essentials-6.4.2-cp37-abi3-win_amd64.whl (77.2 MB)
     |████████████████████████████████| 77.2 MB 3.3 MB/s
Collecting PySide6-Addons==6.4.2
  Downloading PySide6_Addons-6.4.2-cp37-abi3-win_amd64.whl (98.8 MB)
     |████████████████████████████████| 98.8 MB 43 kB/s
Collecting shiboken6==6.4.2
  Downloading shiboken6-6.4.2-cp37-abi3-win_amd64.whl (1.5 MB)
     |████████████████████████████████| 1.5 MB 182 kB/s
Requirement already satisfied: qtpy>=1.9 in c:\qgb\anaconda3\lib\site-packages (from qdarkstyle->howtrader==3.3.0) (1.9.0)
Requirement already satisfied: chardet<5,>=3.0.2 in c:\qgb\anaconda3\lib\site-packages (from requests->howtrader==3.3.0) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in c:\qgb\anaconda3\lib\site-packages (from requests->howtrader==3.3.0) (2022.6.15)
Requirement already satisfied: idna<3,>=2.5 in c:\qgb\anaconda3\lib\site-packages (from requests->howtrader==3.3.0) (2.8)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\qgb\anaconda3\lib\site-packages (from requests->howtrader==3.3.0) (1.25.10)
Requirement already satisfied: yarl<2.0,>=1.0 in c:\users\qgb\appdata\roaming\python\python37\site-packages (from aiohttp->howtrader==3.3.0) (1.3.0)
Requirement already satisfied: async-timeout<4.0,>=3.0 in c:\users\qgb\appdata\roaming\python\python37\site-packages (from aiohttp->howtrader==3.3.0) (3.0.1)
Requirement already satisfied: multidict<5.0,>=4.5 in c:\users\qgb\appdata\roaming\python\python37\site-packages (from aiohttp->howtrader==3.3.0) (4.5.2)
Requirement already satisfied: attrs>=17.3.0 in c:\qgb\anaconda3\lib\site-packages (from aiohttp->howtrader==3.3.0) (19.3.0)
Requirement already satisfied: dnspython<3.0.0,>=1.16.0 in c:\qgb\anaconda3\lib\site-packages (from pymongo->howtrader==3.3.0) (2.1.0)
Requirement already satisfied: python-dateutil>=2.6.1 in c:\qgb\anaconda3\lib\site-packages (from pandas->howtrader==3.3.0) (2.8.0)
Requirement already satisfied: packaging>=20.0 in c:\qgb\anaconda3\lib\site-packages (from matplotlib->howtrader==3.3.0) (21.3)
Requirement already satisfied: fonttools>=4.22.0 in c:\qgb\anaconda3\lib\site-packages (from matplotlib->howtrader==3.3.0) (4.22.1)
Requirement already satisfied: pyparsing>=2.2.1 in c:\qgb\anaconda3\lib\site-packages (from matplotlib->howtrader==3.3.0) (3.0.9)
Requirement already satisfied: kiwisolver>=1.0.1 in c:\qgb\anaconda3\lib\site-packages (from matplotlib->howtrader==3.3.0) (1.1.0)
Requirement already satisfied: pillow>=6.2.0 in c:\qgb\anaconda3\lib\site-packages (from matplotlib->howtrader==3.3.0) (8.3.1)
Requirement already satisfied: cycler>=0.10 in c:\qgb\anaconda3\lib\site-packages (from matplotlib->howtrader==3.3.0) (0.10.0)
Requirement already satisfied: typing_extensions; python_version < "3.8" in c:\qgb\anaconda3\lib\site-packages (from seaborn->howtrader==3.3.0) (4.3.0)
Collecting tenacity>=6.2.0
  Downloading tenacity-8.2.1-py3-none-any.whl (24 kB)
Requirement already satisfied: zipp>=0.5 in c:\qgb\anaconda3\lib\site-packages (from importlib-metadata->howtrader==3.3.0) (0.6.0)
Requirement already satisfied: MarkupSafe>=0.23 in c:\qgb\anaconda3\lib\site-packages (from Jinja2>=2.10.1->flask->howtrader==3.3.0) (1.1.1)
Requirement already satisfied: colorama; platform_system == "Windows" in c:\qgb\anaconda3\lib\site-packages (from click>=5.1->flask->howtrader==3.3.0) (0.4.5)
Requirement already satisfied: six>=1.5 in c:\qgb\anaconda3\lib\site-packages (from python-dateutil>=2.6.1->pandas->howtrader==3.3.0) (1.15.0)
Requirement already satisfied: setuptools in c:\qgb\anaconda3\lib\site-packages (from kiwisolver>=1.0.1->matplotlib->howtrader==3.3.0) (41.6.0.post20191030)
Requirement already satisfied: more-itertools in c:\qgb\anaconda3\lib\site-packages (from zipp>=0.5->importlib-metadata->howtrader==3.3.0) (7.2.0)
Building wheels for collected packages: howtrader, peewee
  Building wheel for howtrader (setup.py) ... done
  Created wheel for howtrader: filename=howtrader-3.3.0-py3-none-any.whl size=413806 sha256=1edfd9c8768602e47cf25fdc6dd2d26e9b79579fc32e6673a3a5510874df59f9
  Stored in directory: C:\Users\qgb\AppData\Local\Temp\pip-ephem-wheel-cache-25fpjn8c\wheels\2c\24\2f\b6952a64d3b9a28ed8501709df290eb4c7f8a198940eb7c495
  Building wheel for peewee (setup.py) ... done
  Created wheel for peewee: filename=peewee-3.15.4-py3-none-any.whl size=134778 sha256=693e0dfb20f33a76d56e2d342025b80b4f11fef9d6906c204632a516d4a5aada
  Stored in directory: c:\users\qgb\appdata\local\pip\cache\wheels\54\74\ab\677da1f27ba931a5004373dbe2663fc82023b8dc9dd2ad603c
Successfully built howtrader peewee
Installing collected packages: simplejson, shiboken6, PySide6-Essentials, PySide6-Addons, PySide6, pyqtgraph, qdarkstyle, peewee, pymongo, seaborn, deap, tenacity, plotly, howtrader
Successfully installed PySide6-6.4.2 PySide6-Addons-6.4.2 PySide6-Essentials-6.4.2 deap-1.3.3 howtrader-3.3.0 peewee-3.15.4 plotly-5.13.0 pymongo-4.3.3 pyqtgraph-0.12.4 qdarkstyle-3.1 seaborn-0.12.2 shiboken6-6.4.2 simplejson-3.18.3 tenacity-8.2.1
Note: you may need to restart the kernel to use updated packages.

In [200]: !python C:\test\tv\howtraderT.py
Traceback (most recent call last):
  File "C:\test\tv\howtraderT.py", line 3, in <module>
    from howtrader.trader.engine import MainEngine
  File "C:\QGB\Anaconda3\lib\site-packages\howtrader\trader\engine.py", line 26, in <module>
    from .gateway import BaseGateway
  File "C:\QGB\Anaconda3\lib\site-packages\howtrader\trader\gateway.py", line 18, in <module>
    from .object import (
  File "C:\QGB\Anaconda3\lib\site-packages\howtrader\trader\object.py", line 10, in <module>
    from .constant import Direction, Exchange, Interval, Offset, Status, Product, OptionType, OrderType
  File "C:\QGB\Anaconda3\lib\site-packages\howtrader\trader\constant.py", line 7, in <module>
    from tzlocal import get_localzone_name
ImportError: cannot import name 'get_localzone_name' from 'tzlocal' (C:\QGB\Anaconda3\lib\site-packages\tzlocal\__init__.py)



backtester

你好,新代码为什么把ui的backtester删掉了,是因为有bug吗

启动main_window 报某个包内错误

报错:
Traceback (most recent call last):
File "C:\work\my_howtrade\main.py", line 80, in
main()
File "C:\work\my_howtrade\main.py", line 68, in main
main_window = MainWindow(main_engine, event_engine)
File "C:\Users\64278\anaconda3\envs\mytrader\lib\site-packages\howtrader\trader\ui\mainwindow.py", line 51, in init
self.init_ui()
File "C:\Users\64278\anaconda3\envs\mytrader\lib\site-packages\howtrader\trader\ui\mainwindow.py", line 56, in init_ui
self.init_dock()
File "C:\Users\64278\anaconda3\envs\mytrader\lib\site-packages\howtrader\trader\ui\mainwindow.py", line 63, in init_dock
self.trading_widget, trading_dock = self.create_dock(
File "C:\Users\64278\anaconda3\envs\mytrader\lib\site-packages\howtrader\trader\ui\mainwindow.py", line 234, in create_dock
dock.setFeatures(dock.DockWidgetFloatable | dock.DockWidgetMovable)
AttributeError: 'PySide6.QtWidgets.QDockWidget' object has no attribute 'DockWidgetFloatable'

具体出问题的包:from howtrader.trader.ui import MainWindow
具体出问题的源码:
def create_dock(
self,
widget_class: QtWidgets.QWidget,
name: str,
area: int
) -> Tuple[QtWidgets.QWidget, QtWidgets.QDockWidget]:
"""
Initialize a dock widget.
"""
widget: QtWidgets.QWidget = widget_class(self.main_engine, self.event_engine)

    dock: QtWidgets.QDockWidget = QtWidgets.QDockWidget(name)
    dock.setWidget(widget)
    dock.setObjectName(name)
    **dock.setFeatures(dock.DockWidgetFloatable | dock.DockWidgetMovable)**
    self.addDockWidget(area, dock)
    return widget, dock

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.