install

先安装 python3,然后安装 Anaconda 2019.10
pycharm 社区版 2019.3.1

创建虚拟环境 conda create -n pyqt_stock python=3.7 anaconda

# 升级 conda
conda update -n base -c defaults conda

pip install pyqt5
# 安装有问题使用国内代理
pip install pyqt5 -i https://mirrors.ustc.edu.cn/pypi/web/simple/
pip install pyqt5-tools -i https://mirrors.ustc.edu.cn/pypi/web/simple/

安装 QT5 然后可以使用设计工具设计界面

pyuic5.exe 将 Designer 生成的 ui 文件 转换为 python 文件
pyrcc5.exe 将 creator 生成的资源文件 qrc 转换为 python 文件
pylupdate5.exe 多语言设计时语言资源文件的工具软件

设计界面

使用 QtDesigner 设计界面然后保存为 xx.ui 文件,使用 pyuic5 转换为 python 文件

pyuic5 -o ui_xxx.py xxx.ui

响应界面事件

import sys

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QWidget

import ui_main

class mainUi(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.__ui = ui_main.Ui_Form()
self.__ui.setupUi(self)
self.__ui.btn_loadDataByDate.clicked.connect(self.OnBtnLoadDataByDate)

def OnBtnLoadDataByDate(self):
self.__ui.label.setText("ddd")


if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
baseWidget = mainUi()

baseWidget.show()
sys.exit(app.exec_())

使用信号槽更新界面信息

使用线程池的方式

没使用线程的方式

class DaoService(QThread):
signal_str = pyqtSignal(str)

def get_trade_date(self):
"""
从接口获取有效交易日信息,存入数据库,返回结构样例
exchange cal_date is_open
0 SSE 20180101 0
1 SSE 20180102 1
2 SSE 20180103 1
"""
self.signal_str.emit(r'开始获取交易日期...')
str_cur_date = datetime.datetime.now().strftime("%Y")

class DataManagerUi(QWidget):
"""
资金曲线类
保存每个交易日的资金余额,绘制折线图
"""

def __init__(self, parent=None):
super().__init__(parent)
self.__ui = ui_data_manager.Ui_Form()
self.__ui.setupUi(self)
self.dao_service = DaoService()
...

def sign_str_proc(self, msg):
self.__ui.edit_log.append(msg)

class MainUi(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.__ui = ui_main.Ui_Form()
self.__ui.setupUi(self)
self.data_manager = DataManagerUi()
...

if __name__ == "__main__":
# 主界面程序
app = QtWidgets.QApplication(sys.argv)
baseWidget = MainUi()
baseWidget.data_manager.dao_service.signal_str.connect(baseWidget.data_manager.sign_str_proc)

install

创建虚拟环境 conda create -n pykivy_stock python=3.7

conda install kivy -c conda-forge

Create an application

import kivy
kivy.require('1.0.6') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.label import Label


class MyApp(App):

def build(self):
return Label(text='Hello world')


if __name__ == '__main__':
MyApp().run()

全屏

this.WindowStyle = System.Windows.WindowStyle.None;
this.WindowState = System.Windows.WindowState.Maximized;

退出全屏

//按Esc键退出全屏
private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)//Esc键
{
this.WindowState = System.Windows.WindowState.Normal;
this.WindowStyle = System.Windows.WindowStyle.SingleBorderWindow;
}
}

int to bytes array

var byArr = BitConverter.GetBytes(Int);

// If the system architecture is little-endian (that is, little end first),
// reverse the byte array.
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);

.net core gb2312 不支持

System.Text.EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance;
Encoding.RegisterProvider(provider);

判断系统

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
// Windows 相关逻辑
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
// Linux 相关逻辑
}

获取当前路径

String appPath = System.AppDomain.CurrentDomain.BaseDirectory;

String appPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)

设置工作路径

System.IO.Directory.SetCurrentDirectory(App.appPath + "\\openssl");
...
// 恢复默认路径
System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
阅读全文 »

DialogResult dr;
dr=MessageBox.Show("测试一下消息对话框!","测试测试",MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning,MessageBoxDefaultButton.Button1);
if(dr==DialogResult.Yes)
MessageBox.Show("你选择的为“是”按钮","系统提示1");
else if(dr==DialogResult.No)
MessageBox.Show("你选择的为“否”按钮","系统提示2");
else if(dr == DialogResult.Cancel)
MessageBox.Show("你选择的为“取消”按钮","系统提示3");
else
MessageBox.Show("你没有进行任何的操作!","系统提示4");

添加事件

<Button Click="HelloWorldButton_Click">Hello, World!</Button>

后台代码

private void HelloWorldButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!");
}

修改 mouse over 默认效果

xaml 文件里面添加下面定义 OpacityButton

<Window.Resources>
<Style x:Key="OpacityButton" TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border" BorderThickness="0" BorderBrush="Black" Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="0.8" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>

button 定义添加 Style="{StaticResource OpacityButton}"

<Button x:Name="btnAllData" Content="" Height="101" Margin="10,0" RenderTransformOrigin="0.478,1.096" IsDefault="True" ToolTip="可以查看综合数据展示信息" Click="btnAllData_Click" MouseEnter="btnAllData_MouseEnter" MouseLeave="btnAllData_MouseLeave" Style="{StaticResource OpacityButton}">
<Button.Background>
<ImageBrush ImageSource="images/btAllDataNormal.png"/>
</Button.Background>
</Button>

图片等信息

<Button Padding="5">  
<StackPanel Orientation="Horizontal">
<Image Source="/WpfTutorialSamples;component/Images/help.png" />
<TextBlock Margin="5,0">Help</TextBlock>
</StackPanel>
</Button>

Project->Add Reference 添加 System.Drawing

private void btnAllData_MouseEnter(object sender, MouseEventArgs e)
{
btnAllData.Content = System.Drawing.Image.FromFile()
}

WinForms is simply a layer on top of the standard Windows controls (e.g. a TextBox)
WPF is built from scratch and doesn’t rely on standard Windows controls in almost all situations.
you will definitely notice if you have ever worked with a framework that depends on Win32/WinAPI.

MaterialDesignThemes

非常流行的开源控件库

install

Tool - NuGet Package manager - NuGet Package manager for solution

Install-Package MaterialDesignThemes -Version 3.0.0

配置App.xaml

<Application x:Class="MaterialTest.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MaterialTest"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

夏季潮湿闷热,容易导致人体湿热。如果感觉口干口苦,嗜睡疲惫,肚子不舒服,身体不利索——说明湿气重啦

湿气分为: 热湿 寒湿 两种,需要对症下药。

坏习惯

  • 睡不够
    从中医角度来说,睡不够就是脾虚的症状。睡好觉,也能让我们的身体更轻盈。
    建议每天晚上11点前就睡觉,每天增加一些运动会让你的睡眠质量更高。
  • 口味重
    肠胃功能好坏关系到营养及水分代谢,最好的方式就是适量、均衡饮食。
    油腻、过咸、太甜等肥甘厚味食物不易消化,容易造成肠胃闷胀、炎。甜食、油炸品会让身体生过氧化物,加重炎症反应。
  • 爱吃凉
  • 喝大酒
    这是加重“湿”的关键因素,从中医上来讲,酒助湿邪,因此酒精尽量要少碰,更不能借酒浇愁。
  • 运动少
  • 老坐着
    久坐会使人的脑供血不足,导致脑供氧和营养物质减少,加重乏力、失眠、记忆力下降等,还会引全身肌肉酸痛、脖子僵硬和头疼、头晕。
  • 穿得少
  • 不通风

症状

  • 起床时看感觉
    早晨起床时还觉得困倦、四肢沉重,尤其是小腿肚子酸沉,手脚冷,人也懒得动弹,说明你体内湿气重了。
  • 穿衣时看感觉
    皮肤总爱起疹子,有时手脚患有小疱疹甚至脱皮,脸上、头总爱出油,黏腻不舒服。
  • 如厕时看大便
    大便经常粘在马桶上,一箱水还冲不净,而且总有排不净的感觉,说明体内有湿气了。
  • 洗漱时看舌苔
    “舌为心之苗,又为脾之外候”。如果舌苔白厚,看起来滑而湿润,则说明体内有寒;如果舌苔粗糙或很厚、黄腻,则说明体内有湿热;如果舌质赤红无苔,则说明体内已经热到一定的程度。
  • 刷牙时看恶不恶心
    有些人一刷牙就呕吐、恶心,嗓子里边总是有不干不净的感觉,想吐痰也吐不出来,也是体内有湿气的表现。
  • 看平时爱不爱动
    体内湿气重的人大多缺乏运动,同时他们又常常会因为湿气重而感觉身体沉重四肢无力。但越是不爱运动,体内淤积的湿气就越多,久而久之会导致湿气攻入脾脏,引疾病。
  • 吃饭时看胃口
    没有原因的胃口不佳、胸腹闷,容易拉肚子。脾湿导致的腹泻不一定是因为病菌,而是脾胃失和造成的,使用抗生素往往并没有效果。

如何判断

热湿

舌头发红,舌苔黄腻厚,口中发干或是发苦,大便粘滞不畅,或干结,尿黄而短,气味很重
身体皮肤处还可能会出现疱疹、湿疹等问题,膀胱湿热,肛门灼热

茯苓粥、荷叶粥、桃花茶
枸杞薏米茶、薏仁茶 、绿茶、老白茶、菊花枸杞茶、玫瑰荷叶茶

寒湿

舌苔白厚有齿痕,大便粘不成形,尿色白,怕冷
出汗较少,身体也就没什么气味

山楂陈皮红茶
喝些发酵的熟茶: 红茶、熟普洱、陈皮普洱

如何解决

运动出汗:运动出汗是很好的去湿气的方法
泡脚

饮食

多吃清淡食物和蔬菜水果,少吃肥甘厚味及辛辣食物,特别是远离烧烤食物;少吃甜食;少饮酒;补充蛋白质和少量的瘦肉;多吃些有祛除湿气作用的食物,如薏米、红薯、土豆、山药、黄豆芽、绿豆芽、冬瓜、木瓜、白扁豆、赤小豆。

不要等到口渴时再喝水,每天至少保证1500毫升,也就是3个矿泉水瓶的量。

穴位

点揉穴位

拇指或食指的指腹按压在穴位上,先垂直向下按压,边按边揉,以产生酸、胀感为宜,每次按揉持续10秒后,渐渐放松,每个穴位上重复这个操作69次,每天可按摩23次。

承山穴

拇指用重力在承山穴进行一分钟环形按揉,然后力度逐渐减少,按压10分钟,一日2次。
此手法适用于湿气较重的患者,能最大化使阳气流通,达到祛除湿气的效果。要注意的是出现灼痛及麻木感时应减缓力度。

一般按几分钟后就会有感觉身体有发热感,这就是体内膀胱经的阳气在流通,湿气就会被阳气驱逐出体内。
20200916_084149.png

丰隆穴

丰隆穴对脾胃两大脏腑都有很好的调理作用,是除湿祛痰主要的穴位,并有调和胃气、补益气血、醒脑安神等功效。
可以点揉穴位的方式按摩,先垂直向下按压,边按边揉,以产生酸、胀感为宜,每次按揉持续10秒后,渐渐放松,重复这个操作69次,每天可按摩23次。

20200724_084543.png

阴陵泉穴
阴陵泉穴位于小腿内侧,胫骨内侧下缘凹陷中。
这个穴位能健脾益气,促进脾运化水湿,经常按揉阴陵泉可健脾化湿,解决体内有“湿”或者水肿的问题。以穴位为中心,用拇指顺时针、逆时针旋转各揉1~3分钟为佳。

20200724_084650.png

曲池穴
曲池穴位于肘关节,弯曲胳膊肘时,肘关节连接的地方便是曲池穴。
曲池穴是大肠经的湿浊之气聚集的地方,此穴为手阳明大肠经合穴,可以清利湿热,调理大肠气血,对“湿热”引起的荨麻疹、急性胃肠炎效果很好。

20200724_084713.png

中脘穴

位于腹部中线上、肚脐上4寸,即胸骨下端与肚脐连线中点,是胃的经气汇集之处。
任何原因引起的脾胃虚弱、运化失调,都可以用中脘穴进行调理。

20200916_082950.png

足三里

足三里位于小腿前外侧,髌骨下缘往下4横指、胫骨外侧1横指。
足三里是一个强壮身心的大穴,有疏风化湿、调节机体免疫力、调理脾胃的作用。

20200916_083014.png

复溜穴

位于小腿内踝和跟腱之间向上3指宽的地方。
“复溜”一词中,“复”是反复,“溜”是悄悄地散失,指肾经的水湿之气在此蒸发上行。按揉复溜穴能刺激它使水分代谢正常。

20200916_083033.png

红豆薏仁汤

红豆薏仁汤是一道具有养生功效的食物,制作原料主要有赤小豆、薏仁,对食欲不振、疮毒、皮肤湿疹、筋骨湿痹、水肿都有一定的治疗作用。红豆与薏仁都能够帮助身体排出多余水分,但因为薏仁偏凉性,不适宜女生单独长期食用,配合温性的红豆,对身体就不会造成负担。红豆可以补血,薏仁则能美白,不仅瘦身还兼具美容的功效。

20191209_102106.png

常说的红豆,一般是上面这两种。赤小豆是细长的,比红豆小,红豆比较圆。祛湿效果最好的是赤小豆,红豆祛湿效果一般,养心效果更出众。

薏米性凉,与赤小豆配合祛湿还需要注意使用炒制之后的薏米

而炒薏米是用小火把薏米炒至金黄色,带有微微焦香味道。所谓“焦香入脾”,经过炒制的薏米与生薏米相比,少了一分寒利,多了一分温涩,温脾、健脾的功效变得明显。

赤小豆、薏米仁较难难煮烂,最好用清水浸泡一小时后再煮。很多人往往都是直接把食材扔锅里煮,这样营养很难出来。

大米使不得
有人在熬薏米红豆汤的时候,加了一把大米,结果粥就熬稠了。事实上,千万不能加大米进去。红豆和薏米都是祛湿的,它们怎么熬都不稠,汤很清。中医恰恰是利用了它这种清的性质,来把人体的湿给除掉,一旦加进去大米,整个粥就稠,虽然味道可能更好了,但对于养生来说并非好事,就因为那一把大米,所有的红豆、薏米就都白费了,功效全无。

GraphQL 不是 REST 的替代品,所以不要想着团队从 Http 接口迁移到 GraphQL 就能提升 X% 的开发效率。GraphQL 方案是一种新的前后端交互约定,所以上手成本会比较高,同时,为了方便前端同学拼 query,等于把一部分后端工作量转移给了前端,如果此时没有一个足够好用的平台快速查阅、生成、维护这些定义,开发效率可能不升反降。

总的来说,对外开放 API 或者拥有完整配套的场景,使用 GraphQL 是比较理想的,但对于快速迭代,平台又不够成熟的团队,继续使用标准 Http 接口可以更快完成项目。

SOUI项目的SVN根目录下有一个doc目录,下面有一份控件属性表。包含了大部分控件的大部分属性,不过也不一定完全准确。最保险的办法还是查源代码。

SOUI对象包含控件及ISkinObj等从SObject派生的对象都可以使用XML配置属性。要知道如何查SOUI对象属性,首先要看一下SOUI解释属性的流程。

先查目标对象的属性映射表,再找基类的属性映射表,最后查对象的DefAttributeProc。