如前所述,示例应用程序使用 SQLite 数据库作为其数据存储(也可由 Python 端访问 - 见下文)。为此,使用了实体框架,以及在这篇 Codeproject 文章中找到的方法。然后将股票数据放入支持过滤和排序的 ListCollectionView 中:private void LoadStocks(){var ctx = new SQLiteDatabaseContext(_mainVm.DbPath);var itemList = ctx.Stocks.ToList().Select(s => new StockItem(s)).ToList();_stocks = new ObservableCollection<StockItem>(itemList);_collectionView = new ListCollectionView(_stocks);// Initially sort the list by stock namesICollectionView view = CollectionViewSource.GetDefaultView(_collectionView);view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));}获取文本输出 在这里,PythonRunner 正在调用生成文本输出的脚本。KMeansClusteringScript 属性指向要执行的脚本:private async Task<string> RunKMeans(){TreeViewText = Processing;Items.Clear();try{ string output = await _mainVm.PythonRunner.ExecuteAsync( KMeansClusteringScript, _mainVm.DbPath, _mainVm.TickerList, _mainVm.NumClusters, _mainVm.StartDate.ToString("yyyy-MM-dd"), _mainVm.EndDate.ToString("yyyy-MM-dd")); return output;}catch (Exception e){ TreeViewText = e.ToString(); return string.Empty;}}这是脚本产生的一些示例输出: 0 AYR 0,0,255 0 PCCWY 0,100,0 0 HSNGY 128,128,128 0 CRHKY 165,42,42 0 IBN 128,128,0 1 SRNN 199,21,133 ... 4 PNBK 139,0,0 5 BOTJ 255,165,0 5 SPPJY 47,79,79第一列是 k-Means 分析的聚类编号,第二列是相应股票的股票代码,第三列表示用于在图表中绘制该股票线条的颜色的 RGB 值。Getting an Image这是使用视图模型的 PythonRunner 实例异步调用所需 Python 脚本(其路径存储在 DrawSummaryLineChartScript 属性中)以及所需脚本参数的方法。结果一旦可用,就会被处理成“WPF 友好”形式:internal async Task<bool> DrawChart(){SummaryChartText = Processing;SummaryChart = null;try{ SummaryChart = Imaging.CreateBitmapSourceFromHBitmap( bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); return true;}catch (Exception e){ SummaryChartText = e.ToString(); return false;} }但这种方法不能正常工作?我做什么 ?
1 回答
四季花海
TA贡献1811条经验 获得超5个赞
调用python脚本绘制所选股票的图表。
internal async Task<bool> DrawChart()
{
SummaryChartText = Processing;
SummaryChart = null;
try
{
var bitmap = await _mainVm.PythonRunner.GetImageAsync(
DrawSummaryLineChartScript,
_mainVm.DbPath,
_mainVm.TickerList,
_mainVm.StartDate.ToString("yyyy-MM-dd"),
_mainVm.EndDate.ToString("yyyy-MM-dd"));
SummaryChart = Imaging.CreateBitmapSourceFromHBitmap(
bitmap.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
return true;
}
catch (Exception e)
{
SummaryChartText = e.ToString();
return false;
}
}
添加回答
举报
0/150
提交
取消