Merge remote-tracking branch 'iron/master'
63
.gitattributes
vendored
Normal file
|
@ -0,0 +1,63 @@
|
|||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
#*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
|
@ -1,5 +1,6 @@
|
|||
eclipse.preferences.version=1
|
||||
encoding//ActiveX\u7A97\u53E3/AxWidget.py=utf-8
|
||||
encoding//C\u548CC++\u6269\u5C55/py\u8F6Cpyd/pydmod.py=utf-8
|
||||
encoding//Json\u751F\u6210QTreeWidget/Json\u751F\u6210\u6811\u5F62\u7ED3\u6784.py=utf-8
|
||||
encoding//PyQtChart\u7EC3\u4E60/ChartView/ChartView.py=utf-8
|
||||
encoding//PyQtChart\u7EC3\u4E60/ChartView/ChatWidget.py=utf-8
|
||||
|
@ -15,6 +16,10 @@ encoding//QGraphicsView\u7EC3\u4E60/\u6DFB\u52A0QWidget.py=utf-8
|
|||
encoding//QGraphicsView\u7EC3\u4E60/\u7B80\u5355\u56FE\u50CF\u5904\u7406/SimpleImagePs.py=utf-8
|
||||
encoding//QGraphicsView\u7EC3\u4E60/\u7B80\u5355\u56FE\u50CF\u5904\u7406/SimpleImageThread.py=utf-8
|
||||
encoding//QGraphicsView\u7EC3\u4E60/\u7B80\u5355\u56FE\u50CF\u5904\u7406/SimpleImageView.py=utf-8
|
||||
encoding//QRC\u8D44\u6E90\u6587\u4EF6\u4F7F\u7528/qrctest1.py=utf-8
|
||||
encoding//QRC\u8D44\u6E90\u6587\u4EF6\u4F7F\u7528/qrctest2.py=utf-8
|
||||
encoding//QRC\u8D44\u6E90\u6587\u4EF6\u4F7F\u7528/res_rc.py=utf-8
|
||||
encoding//QRC\u8D44\u6E90\u6587\u4EF6\u4F7F\u7528/textread.py=utf-8
|
||||
encoding//tmp/LocalClient.py=utf-8
|
||||
encoding//tmp/Material/Effect/LineEffect.py=utf-8
|
||||
encoding//tmp/Material/Utils/Colors.py=utf-8
|
||||
|
@ -43,6 +48,12 @@ encoding//\u591A\u7EBF\u7A0B\u4F7F\u7528/\u7EBF\u7A0B\u6302\u8D77\u6062\u590D.py
|
|||
encoding//\u5B57\u4F53\u6D4B\u8BD5/FontAwesome.py=utf-8
|
||||
encoding//\u5B57\u4F53\u6D4B\u8BD5/TestFontAwesome.py=utf-8
|
||||
encoding//\u5B57\u4F53\u6D4B\u8BD5/TestFontRoboto.py=utf-8
|
||||
encoding//\u5DE6\u4FA7\u9009\u9879\u5361/LeftTabWidget.py=utf-8
|
||||
encoding//\u63A2\u6D4B\u7A97\u53E3\u548C\u653E\u5927\u622A\u56FE/\u7B80\u5355\u63A2\u6D4B\u7A97\u53E3\u548C\u653E\u5927\u622A\u56FE.py=utf-8
|
||||
encoding//\u6570\u636E\u5E93\u67E5\u8BE2\u663E\u793A\u8868\u683C/main.py=utf-8
|
||||
encoding//\u6570\u636E\u5E93\u67E5\u8BE2\u663E\u793A\u8868\u683C/mainui.py=utf-8
|
||||
encoding//\u65E0\u8FB9\u6846\u81EA\u5B9A\u4E49\u6807\u9898\u680F\u7A97\u53E3/FramelessWindow.py=utf-8
|
||||
encoding//\u65E0\u8FB9\u6846\u81EA\u5B9A\u4E49\u6807\u9898\u680F\u7A97\u53E3/Test.py=utf-8
|
||||
encoding//\u68A6\u5E7B\u6811/DreamTree.py=utf-8
|
||||
encoding//\u6C14\u6CE1\u63D0\u793A/BubbleTips.py=utf-8
|
||||
encoding//\u6D4F\u89C8\u5668\u83B7\u53D6Cookie/WebEngineView.py=utf-8
|
||||
|
@ -62,6 +73,8 @@ encoding//\u754C\u9762\u7F8E\u5316/QPushButton\u8FDB\u5EA6\u52A8\u753B/PushButto
|
|||
encoding//\u754C\u9762\u7F8E\u5316/QSS\u7F8E\u5316\u4F8B\u5B50/QProgressBar\u8FDB\u5EA6\u6761\u6837\u5F0F/ProgressBar.py=utf-8
|
||||
encoding//\u754C\u9762\u7F8E\u5316/QSS\u7F8E\u5316\u4F8B\u5B50/QPushButton\u6309\u94AE/ButtonHover.py=utf-8
|
||||
encoding//\u754C\u9762\u7F8E\u5316/QScrollBar\u6EDA\u52A8\u6761\u6837\u5F0F/ScrollBar.py=utf-8
|
||||
encoding//\u754C\u9762\u7F8E\u5316/QSlider\u7F8E\u5316/PaintQSlider.py=utf-8
|
||||
encoding//\u754C\u9762\u7F8E\u5316/QSlider\u7F8E\u5316/QssQSlider.py=utf-8
|
||||
encoding//\u754C\u9762\u7F8E\u5316/\u6C34\u6CE2\u7EB9\u8FDB\u5EA6\u6761/ProgressBar.py=utf-8
|
||||
encoding//\u754C\u9762\u7F8E\u5316/\u6C34\u6CE2\u7EB9\u8FDB\u5EA6\u6761/TestWidget.py=utf-8
|
||||
encoding//\u7A0B\u5E8F\u91CD\u542F/AutoRestart.py=utf-8
|
||||
|
|
BIN
C和C++扩展/pydext/.vs/pydext/v15/.suo
Normal file
BIN
C和C++扩展/pydext/.vs/pydext/v15/Browse.VC.db
Normal file
BIN
C和C++扩展/pydext/Release/pydext.exp
Normal file
BIN
C和C++扩展/pydext/Release/pydext.iobj
Normal file
BIN
C和C++扩展/pydext/Release/pydext.ipdb
Normal file
BIN
C和C++扩展/pydext/Release/pydext.lib
Normal file
BIN
C和C++扩展/pydext/Release/pydext.pdb
Normal file
BIN
C和C++扩展/pydext/Release/pydext.pyd
Normal file
31
C和C++扩展/pydext/pydext.sln
Normal file
|
@ -0,0 +1,31 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27428.2037
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pydext", "pydext\pydext.vcxproj", "{023C9F4B-FECC-430A-81D2-7044FAFF15D0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{023C9F4B-FECC-430A-81D2-7044FAFF15D0}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{023C9F4B-FECC-430A-81D2-7044FAFF15D0}.Debug|x64.Build.0 = Debug|x64
|
||||
{023C9F4B-FECC-430A-81D2-7044FAFF15D0}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{023C9F4B-FECC-430A-81D2-7044FAFF15D0}.Debug|x86.Build.0 = Debug|Win32
|
||||
{023C9F4B-FECC-430A-81D2-7044FAFF15D0}.Release|x64.ActiveCfg = Release|x64
|
||||
{023C9F4B-FECC-430A-81D2-7044FAFF15D0}.Release|x64.Build.0 = Release|x64
|
||||
{023C9F4B-FECC-430A-81D2-7044FAFF15D0}.Release|x86.ActiveCfg = Release|Win32
|
||||
{023C9F4B-FECC-430A-81D2-7044FAFF15D0}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {FB11C75A-F832-45BC-BEB7-40ED2F7A3A3B}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
15
C和C++扩展/pydext/pydext/Release/pydext.Build.CppClean.log
Normal file
|
@ -0,0 +1,15 @@
|
|||
f:\python\github\pyqt\c和c++扩展\pydext\pydext\release\vc141.pdb
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\pydext\release\pydext.obj
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\release\pydext.pyd
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\release\pydext.pdb
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\release\pydext.lib
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\release\pydext.exp
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\release\pydext.ipdb
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\release\pydext.iobj
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\pydext\release\pydext.tlog\cl.command.1.tlog
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\pydext\release\pydext.tlog\cl.read.1.tlog
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\pydext\release\pydext.tlog\cl.write.1.tlog
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\pydext\release\pydext.tlog\link.command.1.tlog
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\pydext\release\pydext.tlog\link.read.1.tlog
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\pydext\release\pydext.tlog\link.write.1.tlog
|
||||
f:\python\github\pyqt\c和c++扩展\pydext\pydext\release\pydext.tlog\pydext.write.1u.tlog
|
7
C和C++扩展/pydext/pydext/Release/pydext.log
Normal file
|
@ -0,0 +1,7 @@
|
|||
F:\Python\Github\PyQt\C和C++扩展\pydext\pydext\pydext.vcxproj(201,5): warning : Python debug symbols are not installed. Installing the symbols through the Python installer is strongly recommended.
|
||||
pydext.c
|
||||
正在创建库 F:\Python\Github\PyQt\C和C++扩展\pydext\Release\pydext.lib 和对象 F:\Python\Github\PyQt\C和C++扩展\pydext\Release\pydext.exp
|
||||
正在生成代码
|
||||
All 5 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
|
||||
已完成代码的生成
|
||||
pydext.vcxproj -> F:\Python\Github\PyQt\C和C++扩展\pydext\Release\pydext.pyd
|
BIN
C和C++扩展/pydext/pydext/Release/pydext.obj
Normal file
BIN
C和C++扩展/pydext/pydext/Release/pydext.tlog/CL.command.1.tlog
Normal file
BIN
C和C++扩展/pydext/pydext/Release/pydext.tlog/CL.read.1.tlog
Normal file
BIN
C和C++扩展/pydext/pydext/Release/pydext.tlog/CL.write.1.tlog
Normal file
BIN
C和C++扩展/pydext/pydext/Release/pydext.tlog/link.command.1.tlog
Normal file
BIN
C和C++扩展/pydext/pydext/Release/pydext.tlog/link.read.1.tlog
Normal file
BIN
C和C++扩展/pydext/pydext/Release/pydext.tlog/link.write.1.tlog
Normal file
|
@ -0,0 +1,2 @@
|
|||
#TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.16299.0
|
||||
Release|Win32|F:\Python\Github\PyQt\C和C++扩展\pydext\|
|
BIN
C和C++扩展/pydext/pydext/Release/pydext.tlog/pydext.write.1u.tlog
Normal file
BIN
C和C++扩展/pydext/pydext/Release/vc141.pdb
Normal file
5
C和C++扩展/pydext/pydext/build.bat
Normal file
|
@ -0,0 +1,5 @@
|
|||
cd %~dp0
|
||||
|
||||
python setup.py build
|
||||
|
||||
pause
|
BIN
C和C++扩展/pydext/pydext/build/lib.win32-3.5/pydext.cp35-win32.pyd
Normal file
BIN
C和C++扩展/pydext/pydext/build/temp.win32-3.5/Release/pydext.obj
Normal file
92
C和C++扩展/pydext/pydext/pydext.c
Normal file
|
@ -0,0 +1,92 @@
|
|||
#include <Python.h>
|
||||
|
||||
// 无参数
|
||||
PyObject *pydext_hello(PyObject *self) {
|
||||
return Py_BuildValue("s", "this is hello function");
|
||||
}
|
||||
|
||||
// 可以解析普通参数
|
||||
// 这里就解析一个好了
|
||||
PyObject *pydext_hello2(PyObject *self, PyObject *args) {
|
||||
char *name = "";
|
||||
|
||||
if (!PyArg_ParseTuple(args, "s", &name)) {
|
||||
PyErr_SetString(PyExc_ValueError, "parameter must be str");
|
||||
return NULL;
|
||||
}
|
||||
return Py_BuildValue("s", name);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(pydext_sum_doc, "sum(x, y, minus=False)\
|
||||
\
|
||||
sum function, if minus=True then return -(x+y)");
|
||||
// 可以解析普通参数和指定参数
|
||||
PyObject *pydext_sum(PyObject *self, PyObject *args, PyObject *kwargs) {
|
||||
/* Shared references that do not need Py_DECREF before returning. */
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int minus = 0;
|
||||
|
||||
/* Parse positional and keyword arguments */
|
||||
static char* keywords[] = { "x", "y", "minus", NULL };
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii|$p", keywords, &x, &y, &minus)) {
|
||||
PyErr_SetString(PyExc_ValueError, "x and y must be int, and minus must be True or False");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Function implementation starts here */
|
||||
if (minus == 1)
|
||||
return Py_BuildValue("i", -(x + y));
|
||||
return Py_BuildValue("i", x + y);
|
||||
}
|
||||
|
||||
/*
|
||||
* List of functions to add to pydext in exec_pydext().
|
||||
*/
|
||||
static PyMethodDef pydext_functions[] = {
|
||||
{ "hello", (PyCFunction)pydext_hello, METH_NOARGS, NULL },
|
||||
{ "hello2", (PyCFunction)pydext_hello2, METH_VARARGS, NULL },
|
||||
{ "sum", (PyCFunction)pydext_sum, METH_VARARGS | METH_KEYWORDS, pydext_sum_doc },
|
||||
{ NULL, NULL, 0, NULL } /* marks end of array */
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialize pydext. May be called multiple times, so avoid
|
||||
* using static state.
|
||||
*/
|
||||
int exec_pydext(PyObject *module) {
|
||||
PyModule_AddFunctions(module, pydext_functions);
|
||||
|
||||
PyModule_AddStringConstant(module, "__author__", "Irony");
|
||||
PyModule_AddStringConstant(module, "__mail__", "892768447@qq.com");
|
||||
PyModule_AddStringConstant(module, "__version__", "1.0.0");
|
||||
|
||||
return 0; /* success */
|
||||
}
|
||||
|
||||
/*
|
||||
* Documentation for pydext.
|
||||
*/
|
||||
PyDoc_STRVAR(pydext_doc, "The pydext module");
|
||||
|
||||
|
||||
static PyModuleDef_Slot pydext_slots[] = {
|
||||
{ Py_mod_exec, exec_pydext },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
static PyModuleDef pydext_def = {
|
||||
PyModuleDef_HEAD_INIT,
|
||||
"pydext",
|
||||
pydext_doc,
|
||||
0, /* m_size */
|
||||
NULL, /* m_methods */
|
||||
pydext_slots,
|
||||
NULL, /* m_traverse */
|
||||
NULL, /* m_clear */
|
||||
NULL, /* m_free */
|
||||
};
|
||||
|
||||
PyMODINIT_FUNC PyInit_pydext() {
|
||||
return PyModuleDef_Init(&pydext_def);
|
||||
}
|
203
C和C++扩展/pydext/pydext/pydext.vcxproj
Normal file
|
@ -0,0 +1,203 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{023C9F4B-FECC-430A-81D2-7044FAFF15D0}</ProjectGuid>
|
||||
<RootNamespace>pydext</RootNamespace>
|
||||
<PythonVersion>3.5</PythonVersion>
|
||||
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="PythonConfiguration">
|
||||
<RegistryView>RegistryView.Registry32</RegistryView>
|
||||
<RegistryView Condition="$(Platform) == 'x64'">RegistryView.Registry64</RegistryView>
|
||||
<PythonTag>$(PythonVersion)-32</PythonTag>
|
||||
<PythonTag Condition="$(Platform) == 'x64'">$(PythonVersion)</PythonTag>
|
||||
<PythonHome Condition="$(PythonHome) == ''">$([MSBuild]::GetRegistryValueFromView('HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\$(PythonTag)\InstallPath', null, null, $(RegistryView)))</PythonHome>
|
||||
<PythonHome Condition="$(PythonHome) == ''">$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\$(PythonTag)\InstallPath', null, null, $(RegistryView)))</PythonHome>
|
||||
<PythonExe Condition="$(PythonExe) == ''">$([MSBuild]::GetRegistryValueFromView('HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\$(PythonTag)\InstallPath', 'ExecutablePath', null, $(RegistryView)))</PythonExe>
|
||||
<PythonExe Condition="$(PythonExe) == ''">$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\$(PythonTag)\InstallPath', 'ExecutablePath', null, $(RegistryView)))</PythonExe>
|
||||
<PythonExe Condition="$(PythonExe) == '' and $(PythonHome) != ''">$(PythonHome)python.exe</PythonExe>
|
||||
<PythonDevVersion>$([MSBuild]::GetRegistryValueFromView('HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\$(PythonTag)\InstalledFeatures', 'dev', null, $(RegistryView)))</PythonDevVersion>
|
||||
<PythonDevVersion Condition="$(PythonDevVersion) == ''">$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\$(PythonTag)\InstalledFeatures', 'dev', null, $(RegistryView)))</PythonDevVersion>
|
||||
<PythonCorePDBVersion>$([MSBuild]::GetRegistryValueFromView('HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\$(PythonTag)\InstalledFeatures', 'core_pdb', null, $(RegistryView)))</PythonCorePDBVersion>
|
||||
<PythonCorePDBVersion Condition="$(PythonCorePDBVersion) == ''">$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\$(PythonTag)\InstalledFeatures', 'core_pdb', null, $(RegistryView)))</PythonCorePDBVersion>
|
||||
<PythonCoreDVersion>$([MSBuild]::GetRegistryValueFromView('HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\$(PythonTag)\InstalledFeatures', 'core_d', null, $(RegistryView)))</PythonCoreDVersion>
|
||||
<PythonCoreDVersion Condition="$(PythonCoreDVersion) == ''">$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\$(PythonTag)\InstalledFeatures', 'core_d', null, $(RegistryView)))</PythonCoreDVersion>
|
||||
<PythonDebugSuffix Condition="$(PythonCoreDVersion) != ''">_d</PythonDebugSuffix>
|
||||
<PythonDExe Condition="$(PythonExe) != '' and $(PythonDExe) == ''">$([System.IO.Path]::GetDirectoryName($(PythonExe)))\python$(PythonDebugSuffix).exe</PythonDExe>
|
||||
<PythonDExe Condition="!Exists($(PythonDExe))">$(PythonExe)</PythonDExe>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<PropertyGroup>
|
||||
<DefaultDebuggerFlavor>WindowsLocalDebugger</DefaultDebuggerFlavor>
|
||||
<DefaultDebuggerFlavor Condition="$(HasPythonDebugLaunchProvider) == 'true'">PythonDebugLaunchProvider</DefaultDebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<TargetName>pydext$(PythonDebugSuffix)</TargetName>
|
||||
<TargetExt>.pyd</TargetExt>
|
||||
<LocalDebuggerCommand>$(PythonDExe)</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommandArguments>-i -c "print('>>> import pydext'); import pydext"</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerEnvironment>PYTHONPATH=$(OutDir)</LocalDebuggerEnvironment>
|
||||
<DebuggerFlavor>$(DefaultDebuggerFlavor)</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<TargetName>pydext</TargetName>
|
||||
<TargetExt>.pyd</TargetExt>
|
||||
<LocalDebuggerCommand>$(PythonExe)</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommandArguments>-i -c "print('>>> import pydext'); import pydext"</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerEnvironment>PYTHONPATH=$(OutDir)</LocalDebuggerEnvironment>
|
||||
<DebuggerFlavor>$(DefaultDebuggerFlavor)</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<TargetName>pydext$(PythonDebugSuffix)</TargetName>
|
||||
<TargetExt>.pyd</TargetExt>
|
||||
<LocalDebuggerCommand>$(PythonDExe)</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommandArguments>-i -c "print('>>> import pydext'); import pydext"</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerEnvironment>PYTHONPATH=$(OutDir)</LocalDebuggerEnvironment>
|
||||
<DebuggerFlavor>$(DefaultDebuggerFlavor)</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<TargetName>pydext</TargetName>
|
||||
<TargetExt>.pyd</TargetExt>
|
||||
<LocalDebuggerCommand>$(PythonExe)</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommandArguments>-i -c "print('>>> import pydext'); import pydext"</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerEnvironment>PYTHONPATH=$(OutDir)</LocalDebuggerEnvironment>
|
||||
<DebuggerFlavor>$(DefaultDebuggerFlavor)</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<RuntimeLibrary Condition="$(PythonCoreDVersion) == ''">MultithreadedDLL</RuntimeLibrary>
|
||||
<AdditionalIncludeDirectories>D:\soft\Python35\include;$(PythonHome)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(PythonHome)libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<RuntimeLibrary Condition="$(PythonCoreDVersion) == ''">MultithreadedDLL</RuntimeLibrary>
|
||||
<AdditionalIncludeDirectories>$(PythonHome)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(PythonHome)libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<RuntimeLibrary>Multithreaded</RuntimeLibrary>
|
||||
<AdditionalIncludeDirectories>D:\soft\Python35\include;$(PythonHome)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<IgnoreSpecificDefaultLibraries>libucrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<AdditionalDependencies>ucrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(PythonHome)libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<RuntimeLibrary>Multithreaded</RuntimeLibrary>
|
||||
<AdditionalIncludeDirectories>$(PythonHome)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<IgnoreSpecificDefaultLibraries>libucrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<AdditionalDependencies>ucrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(PythonHome)libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="pydext.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
<Target Name="_ValidatePythonInstall" BeforeTargets="PrepareForBuild">
|
||||
<Error Condition="$(PythonHome) == ''" Text="Python $(PythonTag) is not installed. Please install Python $(PythonTag) and try again." />
|
||||
<Error Condition="$(PythonDevVersion) == ''" Text="Python development files are not installed. Please add the development files, or repair your existing installation." />
|
||||
<Warning Condition="$(PythonCorePDBVersion) == ''" Text="Python debug symbols are not installed. Installing the symbols through the Python installer is strongly recommended." />
|
||||
</Target>
|
||||
</Project>
|
22
C和C++扩展/pydext/pydext/pydext.vcxproj.filters
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="pydext.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
4
C和C++扩展/pydext/pydext/pydext.vcxproj.user
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup />
|
||||
</Project>
|
8
C和C++扩展/pydext/pydext/setup.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
from distutils.core import setup, Extension
|
||||
|
||||
module = Extension('pydext', sources = ['pydext.c'])
|
||||
|
||||
setup (name = 'pydext',
|
||||
version = '1.0.0',
|
||||
description = 'This is pydext',
|
||||
ext_modules = [module])
|
22
C和C++扩展/pydext/pydext/test.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
import sys
|
||||
|
||||
sys.path.insert(0,
|
||||
'./build/lib.{0}-{1}.{2}'.format(sys.platform, sys.version_info.major, sys.version_info.minor))
|
||||
|
||||
|
||||
import pydext
|
||||
|
||||
print(pydext)
|
||||
print(dir(pydext))
|
||||
|
||||
print(pydext.__author__)
|
||||
print(pydext.__mail__)
|
||||
|
||||
print(pydext.hello())
|
||||
|
||||
print(pydext.hello2('Irony'))
|
||||
|
||||
print(pydext.sum(1, 5))
|
||||
|
||||
# 结果变负数
|
||||
print(pydext.sum(1, 5, minus=True))
|
1
C和C++扩展/pydext/pydext/说明.txt
Normal file
|
@ -0,0 +1 @@
|
|||
该目录下的setup.py是在vs编译环境的cmd下调用build.bat进行编译生成build文件夹。然后执行python test.py 对build文件夹中的pyd进行测试
|
19
C和C++扩展/pydext/test.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
import sys
|
||||
sys.path.insert(0, './Release')
|
||||
|
||||
import pydext
|
||||
|
||||
print(pydext)
|
||||
print(dir(pydext))
|
||||
|
||||
print(pydext.__author__)
|
||||
print(pydext.__mail__)
|
||||
|
||||
print(pydext.hello())
|
||||
|
||||
print(pydext.hello2('Irony'))
|
||||
|
||||
print(pydext.sum(1, 5))
|
||||
|
||||
# 结果变负数
|
||||
print(pydext.sum(1, 5, minus=True))
|
1
C和C++扩展/pydext/说明.txt
Normal file
|
@ -0,0 +1 @@
|
|||
该目录的test.py是用vs打开pydext.sln编译后生成的Release文件夹里的pyd进行测试
|
8292
C和C++扩展/pyx和c++/CalSpecSpea.cpp
Normal file
27
C和C++扩展/pyx和c++/CalSpecSpea.pyx
Normal file
|
@ -0,0 +1,27 @@
|
|||
#%%cython
|
||||
import numpy as np
|
||||
cimport numpy as np
|
||||
np.import_array()
|
||||
|
||||
# 参考http://cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html?highlight=cdef%20extern%20from
|
||||
# 参考https://www.zhihu.com/question/23003213
|
||||
|
||||
cdef extern from "CalSpecSpeaLib.h":
|
||||
void cal_spec_accel(double acc[], int len, double dt, double maxPeriod, double periodStep, double dampRatio, double *Period, double *Fre, double *MAcc, double *MVel, double *MDis, int numt)
|
||||
|
||||
def calspecaccel(np.ndarray[double, ndim=1, mode="c"] acc, int length, double dt, double maxPeriod, double periodStep, double dampRatio):
|
||||
cdef int numt = int(maxPeriod / periodStep) + 1
|
||||
# 初始化各存储数据
|
||||
cdef np.ndarray[double, ndim=1] Fre = np.zeros(numt, float)
|
||||
cdef np.ndarray[double, ndim=1] MDis = np.zeros(numt, float)
|
||||
cdef np.ndarray[double, ndim=1] MVel = np.zeros(numt, float)
|
||||
cdef np.ndarray[double, ndim=1] MAcc = np.zeros(numt, float)
|
||||
#产生501个
|
||||
cdef np.ndarray[double, ndim=1] Period = np.arange(0.0, maxPeriod + periodStep, periodStep) # 10.0 + 0.02, 0.02
|
||||
Period[0] = 0.001
|
||||
# 调用CalSpecSpeaLib.cpp定义的函数对数组进行处理
|
||||
cal_spec_accel(<double*> np.PyArray_DATA(acc), length, dt, maxPeriod, periodStep, dampRatio,
|
||||
<double*> np.PyArray_DATA(Period), <double*> np.PyArray_DATA(Fre),
|
||||
<double*> np.PyArray_DATA(MAcc), <double*> np.PyArray_DATA(MVel),
|
||||
<double*> np.PyArray_DATA(MDis), numt)
|
||||
return Period, Fre, MAcc, MVel, MDis
|
63
C和C++扩展/pyx和c++/CalSpecSpeaLib.cpp
Normal file
|
@ -0,0 +1,63 @@
|
|||
#include "CalSpecSpeaLib.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
using namespace std;
|
||||
|
||||
|
||||
double maxabs(double num[], int len)
|
||||
{
|
||||
//略
|
||||
return abs(num[0]);
|
||||
|
||||
}
|
||||
bool isALLvaluezero(double num[], int len)
|
||||
{
|
||||
//略
|
||||
return false;
|
||||
|
||||
}
|
||||
void cal_spec_accel(double acc[], int len, double dt, double maxPeriod, double periodStep, double dampRatio, double *Period, double *Fre, double *MAcc, double *MVel, double *MDis, int numt)
|
||||
{
|
||||
//略
|
||||
Period[0] = 99.95;
|
||||
Fre[0] = 99.96;
|
||||
MAcc[0] = 99.97;
|
||||
MVel[0] = 99.98;
|
||||
MDis[0] = 99.99;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
double acc[20] = { 0.0038,0.0049,0.0061,0.0075,0.0088,0.01,0.0112,0.0123,0.0133,0.0140,0.0146,0.0152,0.0157,0.0162,0.0167,0.0172,0.0175,0.0178,0.0179,0.0179 };
|
||||
int len = 20;
|
||||
double dt = 0.005;
|
||||
double maxPeriod = 10.0;
|
||||
double periodStep = 0.02;
|
||||
double dampRatio = 0.05;
|
||||
int numt = int(maxPeriod / periodStep) + 1;
|
||||
double *Fre = new double[numt];
|
||||
double *MDis = new double[numt];
|
||||
double *MVel = new double[numt];
|
||||
double *MAcc = new double[numt];
|
||||
double *Period = new double[numt];
|
||||
for (int i = 0; i<numt; i++) {
|
||||
Period[i] = periodStep*i;
|
||||
Fre[i] = 0;
|
||||
MDis[i] = 0;
|
||||
MVel[i] = 0;
|
||||
MAcc[i] = 0;
|
||||
}
|
||||
Period[0] = 0.001;
|
||||
//cal_spec_accel(double acc[], int len,double dt,double maxPeriod,double periodStep,double dampRatio,double *Period,double *Fre,double *MAcc,double *MVel,double *MDis)
|
||||
cal_spec_accel(acc, len, dt, maxPeriod, periodStep, dampRatio, Period, Fre, MAcc, MVel, MDis, numt);
|
||||
|
||||
for (int i = 0; i<numt; i++)
|
||||
{
|
||||
cout << MAcc[i] << endl;
|
||||
}
|
||||
|
||||
delete[] Fre;
|
||||
return 0;
|
||||
}
|
3
C和C++扩展/pyx和c++/CalSpecSpeaLib.h
Normal file
|
@ -0,0 +1,3 @@
|
|||
double maxabs(double num[], int len);
|
||||
bool isALLvaluezero(double num[], int len);
|
||||
void cal_spec_accel(double acc[], int len, double dt, double maxPeriod, double periodStep, double dampRatio, double *Period, double *Fre, double *MAcc, double *MVel, double *MDis, int numt);
|
7
C和C++扩展/pyx和c++/build.bat
Normal file
|
@ -0,0 +1,7 @@
|
|||
cd %~dp0
|
||||
|
||||
python setup.py build
|
||||
|
||||
python test.py
|
||||
|
||||
pause
|
BIN
C和C++扩展/pyx和c++/build/lib.win32-3.5/CalSpecSpea.cp35-win32.pyd
Normal file
BIN
C和C++扩展/pyx和c++/build/temp.win32-3.5/Release/CalSpecSpea.obj
Normal file
BIN
C和C++扩展/pyx和c++/build/temp.win32-3.5/Release/CalSpecSpeaLib.obj
Normal file
2971
C和C++扩展/pyx和c++/hf_acc.txt
Normal file
11
C和C++扩展/pyx和c++/setup.py
Normal file
|
@ -0,0 +1,11 @@
|
|||
from distutils.core import setup, Extension
|
||||
|
||||
from Cython.Distutils import build_ext
|
||||
import numpy
|
||||
|
||||
|
||||
setup(
|
||||
cmdclass={'build_ext': build_ext},
|
||||
ext_modules=[Extension("CalSpecSpea", sources=[
|
||||
"CalSpecSpea.pyx", "CalSpecSpeaLib.cpp"], language="c++", include_dirs=[numpy.get_include()])]
|
||||
)
|
32
C和C++扩展/pyx和c++/test.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
import sys
|
||||
import time
|
||||
|
||||
sys.path.append(
|
||||
'./build/lib.{0}-{1}.{2}'.format(sys.platform, sys.version_info.major, sys.version_info.minor))
|
||||
|
||||
|
||||
from CalSpecSpea import calspecaccel
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
t1 = time.time()
|
||||
acc = np.loadtxt('hf_acc.txt')
|
||||
dt = 0.005
|
||||
maxPeriod = 10.0
|
||||
periodStep = 0.02
|
||||
dampRatio = 0.05
|
||||
|
||||
Period, Fre, MAcc, MVel, MDis = calspecaccel(
|
||||
acc, acc.shape[0], dt, maxPeriod, periodStep, dampRatio)
|
||||
|
||||
print('Period[0]', Period[0])
|
||||
print('Fre[0]', Fre[0])
|
||||
print('MAcc[0]', MAcc[0])
|
||||
print('MVel[0]', MVel[0])
|
||||
print('MDis[0]', MDis[0])
|
||||
|
||||
t2 = time.time() - t1
|
||||
print(t2)
|
||||
|
||||
plt.plot(Period, MAcc)
|
||||
plt.show()
|
7
C和C++扩展/py转pyd/build.bat
Normal file
|
@ -0,0 +1,7 @@
|
|||
cd %~dp0
|
||||
|
||||
python setup.py build
|
||||
|
||||
python test.py
|
||||
|
||||
pause
|
BIN
C和C++扩展/py转pyd/build/lib.win32-3.5/pydmod.cp35-win32.pyd
Normal file
BIN
C和C++扩展/py转pyd/build/temp.win32-3.5/Release/pydmod.obj
Normal file
3197
C和C++扩展/py转pyd/pydmod.c
Normal file
19
C和C++扩展/py转pyd/pydmod.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Created on 2018年5月6日
|
||||
# author: Irony
|
||||
# site: https://github.com/892768447
|
||||
# email: 892768447@qq.com
|
||||
# file:
|
||||
# description:
|
||||
|
||||
__Author__ = """By: Irony
|
||||
QQ: 892768447
|
||||
Email: 892768447@qq.com"""
|
||||
__Copyright__ = 'Copyright (c) 2018 Irony'
|
||||
__Version__ = 1.0
|
||||
|
||||
|
||||
def sum(x, y):
|
||||
return x + y
|
9
C和C++扩展/py转pyd/setup.py
Normal file
|
@ -0,0 +1,9 @@
|
|||
from distutils.core import setup, Extension
|
||||
|
||||
from Cython.Distutils import build_ext
|
||||
|
||||
|
||||
setup(
|
||||
cmdclass={'build_ext': build_ext},
|
||||
ext_modules=[Extension("pydmod", sources=["pydmod.py"])]
|
||||
)
|
7
C和C++扩展/py转pyd/test.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
import sys
|
||||
sys.path.insert(0,
|
||||
'./build/lib.{0}-{1}.{2}'.format(sys.platform, sys.version_info.major, sys.version_info.minor))
|
||||
|
||||
import pydmod
|
||||
print(pydmod)
|
||||
print(pydmod.sum(1, 5))
|
34
QRC资源文件使用/README.md
Normal file
|
@ -0,0 +1,34 @@
|
|||
# 图片加载测试
|
||||
|
||||
### [Python3.4.4 or Python3.5][PyQt5]
|
||||
|
||||
### 分别通过2种情况加载图片文件和资源文件
|
||||
|
||||
1. 通过pyrcc5转换res.qrc为res_rc.py文件,可以直接import加载
|
||||
- 转换命令pyrcc5 res.qrc -o res_rc.py
|
||||
- import res_rc
|
||||
- 此时可以通过QPixmap(":/images/head.jpg")来加载
|
||||
|
||||
2. 通过rcc命令转成为二进制文件res.rcc
|
||||
- 转换命令cd tools
|
||||
- rcc.exe -binary ../res.qrc -o ../res.data
|
||||
- 通过QResource.registerResource("res.data")注册
|
||||
- 此时可以通过QPixmap(":/images/head.jpg")来加载
|
||||
|
||||
3. 文本资源读取
|
||||
|
||||
```
|
||||
def readText(path):
|
||||
file = QFile(path)
|
||||
if not file.open(QIODevice.ReadOnly):
|
||||
return ''
|
||||
stream = QTextStream(file)
|
||||
#下面这句设置编码根据文件的编码自行确定
|
||||
stream.setCodec(QTextCodec.codecForName('UTF-8'))
|
||||
data = stream.readAll()
|
||||
file.close()
|
||||
del stream
|
||||
return data
|
||||
```
|
||||
|
||||
其它方式见https://github.com/892768447/PyQt/tree/master/%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD
|
BIN
QRC资源文件使用/images/head.jpg
Normal file
After Width: | Height: | Size: 6.5 KiB |
44
QRC资源文件使用/qrctest1.py
Normal file
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
'''
|
||||
Created on 2018年05月01日
|
||||
@author: Irony."[讽刺]
|
||||
@site: http://alyl.vip, http://orzorz.vip, https://coding.net/u/892768447, https://github.com/892768447
|
||||
@email: 892768447@qq.com
|
||||
@file: qrctest1
|
||||
@description:
|
||||
'''
|
||||
|
||||
from PyQt5.QtGui import QPixmap
|
||||
from PyQt5.QtWidgets import QLabel
|
||||
|
||||
import res_rc # @UnusedImport @UnresolvedImport
|
||||
|
||||
|
||||
__Author__ = "By: Irony.\"[讽刺]\nQQ: 892768447\nEmail: 892768447@qq.com"
|
||||
__Copyright__ = "Copyright (c) 2017 Irony.\"[讽刺]"
|
||||
__Version__ = "Version 1.0"
|
||||
|
||||
|
||||
class ImageView(QLabel):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ImageView, self).__init__(*args, **kwargs)
|
||||
self.resize(800, 600)
|
||||
|
||||
# 从资源文件res_rc.py中加载
|
||||
# 转换命令pyrcc5 res.qrc -o res_rc.py
|
||||
# 这种方式是从通过pyrcc5转换res.qrc为res_rc.py文件,可以直接import加载
|
||||
# 此时可以通过路径:/images/head.jpg来访问
|
||||
self.setPixmap(QPixmap(":/images/head.jpg"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
app = QApplication(sys.argv)
|
||||
app.aboutToQuit.connect(res_rc.qCleanupResources) # 退出时要清理资源
|
||||
w = ImageView()
|
||||
w.show()
|
||||
sys.exit(app.exec_())
|
44
QRC资源文件使用/qrctest2.py
Normal file
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
'''
|
||||
Created on 2018年05月01日
|
||||
@author: Irony."[讽刺]
|
||||
@site: http://alyl.vip, http://orzorz.vip, https://coding.net/u/892768447, https://github.com/892768447
|
||||
@email: 892768447@qq.com
|
||||
@file: qrctest2
|
||||
@description:
|
||||
'''
|
||||
|
||||
|
||||
from PyQt5.QtCore import QResource
|
||||
from PyQt5.QtGui import QPixmap
|
||||
from PyQt5.QtWidgets import QLabel
|
||||
|
||||
|
||||
__Author__ = "By: Irony.\"[讽刺]\nQQ: 892768447\nEmail: 892768447@qq.com"
|
||||
__Copyright__ = "Copyright (c) 2017 Irony.\"[讽刺]"
|
||||
__Version__ = "Version 1.0"
|
||||
|
||||
|
||||
class ImageView(QLabel):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ImageView, self).__init__(*args, **kwargs)
|
||||
self.resize(800, 600)
|
||||
self.setPixmap(QPixmap(":/images/head.jpg"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
app = QApplication(sys.argv)
|
||||
# 从二进制资源文件res.data中加载
|
||||
# 转换命令cd tools
|
||||
# rcc.exe -binary ../res.qrc -o ../res.data
|
||||
# 此时需要注册
|
||||
QResource.registerResource("res.data")
|
||||
app.aboutToQuit.connect(lambda: QResource.unregisterResource("res.data"))
|
||||
w = ImageView()
|
||||
w.show()
|
||||
sys.exit(app.exec_())
|
BIN
QRC资源文件使用/res.data
Normal file
6
QRC资源文件使用/res.qrc
Normal file
|
@ -0,0 +1,6 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>images/head.jpg</file>
|
||||
<file>README.md</file>
|
||||
</qresource>
|
||||
</RCC>
|
545
QRC资源文件使用/res_rc.py
Normal file
|
@ -0,0 +1,545 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Resource object code
|
||||
#
|
||||
# Created by: The Resource Compiler for PyQt5 (Qt v5.10.1)
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore
|
||||
|
||||
qt_resource_data = b"\
|
||||
\x00\x00\x04\x0e\
|
||||
\x23\
|
||||
\x20\xe5\x9b\xbe\xe7\x89\x87\xe5\x8a\xa0\xe8\xbd\xbd\xe6\xb5\x8b\
|
||||
\xe8\xaf\x95\x0d\x0a\x0d\x0a\x23\x23\x23\x20\x5b\x50\x79\x74\x68\
|
||||
\x6f\x6e\x33\x2e\x34\x2e\x34\x20\x6f\x72\x20\x50\x79\x74\x68\x6f\
|
||||
\x6e\x33\x2e\x35\x5d\x5b\x50\x79\x51\x74\x35\x5d\x0d\x0a\x0d\x0a\
|
||||
\x23\x23\x23\x20\xe5\x88\x86\xe5\x88\xab\xe9\x80\x9a\xe8\xbf\x87\
|
||||
\x32\xe7\xa7\x8d\xe6\x83\x85\xe5\x86\xb5\xe5\x8a\xa0\xe8\xbd\xbd\
|
||||
\xe5\x9b\xbe\xe7\x89\x87\xe6\x96\x87\xe4\xbb\xb6\xe5\x92\x8c\xe8\
|
||||
\xb5\x84\xe6\xba\x90\xe6\x96\x87\xe4\xbb\xb6\x0d\x0a\x0d\x0a\x31\
|
||||
\x2e\x20\xe9\x80\x9a\xe8\xbf\x87\x70\x79\x72\x63\x63\x35\xe8\xbd\
|
||||
\xac\xe6\x8d\xa2\x72\x65\x73\x2e\x71\x72\x63\xe4\xb8\xba\x72\x65\
|
||||
\x73\x5f\x72\x63\x2e\x70\x79\xe6\x96\x87\xe4\xbb\xb6\xef\xbc\x8c\
|
||||
\xe5\x8f\xaf\xe4\xbb\xa5\xe7\x9b\xb4\xe6\x8e\xa5\x69\x6d\x70\x6f\
|
||||
\x72\x74\xe5\x8a\xa0\xe8\xbd\xbd\x0d\x0a\x20\x2d\x20\xe8\xbd\xac\
|
||||
\xe6\x8d\xa2\xe5\x91\xbd\xe4\xbb\xa4\x70\x79\x72\x63\x63\x35\x20\
|
||||
\x72\x65\x73\x2e\x71\x72\x63\x20\x2d\x6f\x20\x72\x65\x73\x5f\x72\
|
||||
\x63\x2e\x70\x79\x0d\x0a\x20\x2d\x20\x69\x6d\x70\x6f\x72\x74\x20\
|
||||
\x72\x65\x73\x5f\x72\x63\x0d\x0a\x20\x2d\x20\xe6\xad\xa4\xe6\x97\
|
||||
\xb6\xe5\x8f\xaf\xe4\xbb\xa5\xe9\x80\x9a\xe8\xbf\x87\x51\x50\x69\
|
||||
\x78\x6d\x61\x70\x28\x22\x3a\x2f\x69\x6d\x61\x67\x65\x73\x2f\x68\
|
||||
\x65\x61\x64\x2e\x6a\x70\x67\x22\x29\xe6\x9d\xa5\xe5\x8a\xa0\xe8\
|
||||
\xbd\xbd\x0d\x0a\x0d\x0a\x32\x2e\x20\xe9\x80\x9a\xe8\xbf\x87\x72\
|
||||
\x63\x63\xe5\x91\xbd\xe4\xbb\xa4\xe8\xbd\xac\xe6\x88\x90\xe4\xb8\
|
||||
\xba\xe4\xba\x8c\xe8\xbf\x9b\xe5\x88\xb6\xe6\x96\x87\xe4\xbb\xb6\
|
||||
\x72\x65\x73\x2e\x72\x63\x63\x0d\x0a\x20\x2d\x20\xe8\xbd\xac\xe6\
|
||||
\x8d\xa2\xe5\x91\xbd\xe4\xbb\xa4\x63\x64\x20\x74\x6f\x6f\x6c\x73\
|
||||
\x0d\x0a\x20\x2d\x20\x72\x63\x63\x2e\x65\x78\x65\x20\x2d\x62\x69\
|
||||
\x6e\x61\x72\x79\x20\x2e\x2e\x2f\x72\x65\x73\x2e\x71\x72\x63\x20\
|
||||
\x2d\x6f\x20\x2e\x2e\x2f\x72\x65\x73\x2e\x64\x61\x74\x61\x0d\x0a\
|
||||
\x20\x2d\x20\xe9\x80\x9a\xe8\xbf\x87\x51\x52\x65\x73\x6f\x75\x72\
|
||||
\x63\x65\x2e\x72\x65\x67\x69\x73\x74\x65\x72\x52\x65\x73\x6f\x75\
|
||||
\x72\x63\x65\x28\x22\x72\x65\x73\x2e\x64\x61\x74\x61\x22\x29\xe6\
|
||||
\xb3\xa8\xe5\x86\x8c\x0d\x0a\x20\x2d\x20\xe6\xad\xa4\xe6\x97\xb6\
|
||||
\xe5\x8f\xaf\xe4\xbb\xa5\xe9\x80\x9a\xe8\xbf\x87\x51\x50\x69\x78\
|
||||
\x6d\x61\x70\x28\x22\x3a\x2f\x69\x6d\x61\x67\x65\x73\x2f\x68\x65\
|
||||
\x61\x64\x2e\x6a\x70\x67\x22\x29\xe6\x9d\xa5\xe5\x8a\xa0\xe8\xbd\
|
||||
\xbd\x0d\x0a\x0d\x0a\x33\x2e\x20\xe6\x96\x87\xe6\x9c\xac\xe8\xb5\
|
||||
\x84\xe6\xba\x90\xe8\xaf\xbb\xe5\x8f\x96\x0d\x0a\x0d\x0a\x60\x60\
|
||||
\x60\x0d\x0a\x64\x65\x66\x20\x72\x65\x61\x64\x54\x65\x78\x74\x28\
|
||||
\x70\x61\x74\x68\x29\x3a\x0d\x0a\x20\x20\x20\x20\x66\x69\x6c\x65\
|
||||
\x20\x3d\x20\x51\x46\x69\x6c\x65\x28\x70\x61\x74\x68\x29\x0d\x0a\
|
||||
\x20\x20\x20\x20\x69\x66\x20\x6e\x6f\x74\x20\x66\x69\x6c\x65\x2e\
|
||||
\x6f\x70\x65\x6e\x28\x51\x49\x4f\x44\x65\x76\x69\x63\x65\x2e\x52\
|
||||
\x65\x61\x64\x4f\x6e\x6c\x79\x29\x3a\x0d\x0a\x20\x20\x20\x20\x20\
|
||||
\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x27\x27\x0d\x0a\x20\x20\
|
||||
\x20\x20\x73\x74\x72\x65\x61\x6d\x20\x3d\x20\x51\x54\x65\x78\x74\
|
||||
\x53\x74\x72\x65\x61\x6d\x28\x66\x69\x6c\x65\x29\x0d\x0a\x20\x20\
|
||||
\x20\x20\x23\xe4\xb8\x8b\xe9\x9d\xa2\xe8\xbf\x99\xe5\x8f\xa5\xe8\
|
||||
\xae\xbe\xe7\xbd\xae\xe7\xbc\x96\xe7\xa0\x81\xe6\xa0\xb9\xe6\x8d\
|
||||
\xae\xe6\x96\x87\xe4\xbb\xb6\xe7\x9a\x84\xe7\xbc\x96\xe7\xa0\x81\
|
||||
\xe8\x87\xaa\xe8\xa1\x8c\xe7\xa1\xae\xe5\xae\x9a\x0d\x0a\x20\x20\
|
||||
\x20\x20\x73\x74\x72\x65\x61\x6d\x2e\x73\x65\x74\x43\x6f\x64\x65\
|
||||
\x63\x28\x51\x54\x65\x78\x74\x43\x6f\x64\x65\x63\x2e\x63\x6f\x64\
|
||||
\x65\x63\x46\x6f\x72\x4e\x61\x6d\x65\x28\x27\x55\x54\x46\x2d\x38\
|
||||
\x27\x29\x29\x0d\x0a\x20\x20\x20\x20\x64\x61\x74\x61\x20\x3d\x20\
|
||||
\x73\x74\x72\x65\x61\x6d\x2e\x72\x65\x61\x64\x41\x6c\x6c\x28\x29\
|
||||
\x0d\x0a\x20\x20\x20\x20\x66\x69\x6c\x65\x2e\x63\x6c\x6f\x73\x65\
|
||||
\x28\x29\x0d\x0a\x20\x20\x20\x20\x64\x65\x6c\x20\x73\x74\x72\x65\
|
||||
\x61\x6d\x0d\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x64\
|
||||
\x61\x74\x61\x0d\x0a\x60\x60\x60\x0d\x0a\x0d\x0a\xe5\x85\xb6\xe5\
|
||||
\xae\x83\xe6\x96\xb9\xe5\xbc\x8f\xe8\xa7\x81\x68\x74\x74\x70\x73\
|
||||
\x3a\x2f\x2f\x67\x69\x74\x68\x75\x62\x2e\x63\x6f\x6d\x2f\x38\x39\
|
||||
\x32\x37\x36\x38\x34\x34\x37\x2f\x50\x79\x51\x74\x2f\x74\x72\x65\
|
||||
\x65\x2f\x6d\x61\x73\x74\x65\x72\x2f\x25\x45\x35\x25\x39\x42\x25\
|
||||
\x42\x45\x25\x45\x37\x25\x38\x39\x25\x38\x37\x25\x45\x35\x25\x38\
|
||||
\x41\x25\x41\x30\x25\x45\x38\x25\x42\x44\x25\x42\x44\
|
||||
\x00\x00\x19\xf0\
|
||||
\xff\
|
||||
\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x78\x00\
|
||||
\x78\x00\x00\xff\xe1\x00\x3a\x45\x78\x69\x66\x00\x00\x4d\x4d\x00\
|
||||
\x2a\x00\x00\x00\x08\x00\x03\x51\x10\x00\x01\x00\x00\x00\x01\x01\
|
||||
\x00\x00\x00\x51\x11\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x51\
|
||||
\x12\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xff\
|
||||
\xdb\x00\x43\x00\x02\x01\x01\x02\x01\x01\x02\x02\x02\x02\x02\x02\
|
||||
\x02\x02\x03\x05\x03\x03\x03\x03\x03\x06\x04\x04\x03\x05\x07\x06\
|
||||
\x07\x07\x07\x06\x07\x07\x08\x09\x0b\x09\x08\x08\x0a\x08\x07\x07\
|
||||
\x0a\x0d\x0a\x0a\x0b\x0c\x0c\x0c\x0c\x07\x09\x0e\x0f\x0d\x0c\x0e\
|
||||
\x0b\x0c\x0c\x0c\xff\xdb\x00\x43\x01\x02\x02\x02\x03\x03\x03\x06\
|
||||
\x03\x03\x06\x0c\x08\x07\x08\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\
|
||||
\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\
|
||||
\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\
|
||||
\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\xff\xc0\x00\x11\x08\x00\x78\
|
||||
\x00\x78\x03\x01\x22\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1f\
|
||||
\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\xff\xc4\x00\
|
||||
\xb5\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04\x00\x00\
|
||||
\x01\x7d\x01\x02\x03\x00\x04\x11\x05\x12\x21\x31\x41\x06\x13\x51\
|
||||
\x61\x07\x22\x71\x14\x32\x81\x91\xa1\x08\x23\x42\xb1\xc1\x15\x52\
|
||||
\xd1\xf0\x24\x33\x62\x72\x82\x09\x0a\x16\x17\x18\x19\x1a\x25\x26\
|
||||
\x27\x28\x29\x2a\x34\x35\x36\x37\x38\x39\x3a\x43\x44\x45\x46\x47\
|
||||
\x48\x49\x4a\x53\x54\x55\x56\x57\x58\x59\x5a\x63\x64\x65\x66\x67\
|
||||
\x68\x69\x6a\x73\x74\x75\x76\x77\x78\x79\x7a\x83\x84\x85\x86\x87\
|
||||
\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\
|
||||
\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\
|
||||
\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\
|
||||
\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf1\xf2\xf3\xf4\xf5\xf6\
|
||||
\xf7\xf8\xf9\xfa\xff\xc4\x00\x1f\x01\x00\x03\x01\x01\x01\x01\x01\
|
||||
\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\
|
||||
\x07\x08\x09\x0a\x0b\xff\xc4\x00\xb5\x11\x00\x02\x01\x02\x04\x04\
|
||||
\x03\x04\x07\x05\x04\x04\x00\x01\x02\x77\x00\x01\x02\x03\x11\x04\
|
||||
\x05\x21\x31\x06\x12\x41\x51\x07\x61\x71\x13\x22\x32\x81\x08\x14\
|
||||
\x42\x91\xa1\xb1\xc1\x09\x23\x33\x52\xf0\x15\x62\x72\xd1\x0a\x16\
|
||||
\x24\x34\xe1\x25\xf1\x17\x18\x19\x1a\x26\x27\x28\x29\x2a\x35\x36\
|
||||
\x37\x38\x39\x3a\x43\x44\x45\x46\x47\x48\x49\x4a\x53\x54\x55\x56\
|
||||
\x57\x58\x59\x5a\x63\x64\x65\x66\x67\x68\x69\x6a\x73\x74\x75\x76\
|
||||
\x77\x78\x79\x7a\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\
|
||||
\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\
|
||||
\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\
|
||||
\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe2\xe3\xe4\xe5\xe6\xe7\
|
||||
\xe8\xe9\xea\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xff\xda\x00\x0c\
|
||||
\x03\x01\x00\x02\x11\x03\x11\x00\x3f\x00\xfd\xfc\xa2\xbc\x87\xf6\
|
||||
\xf5\xf8\xc3\xe2\xef\x80\x1f\xb1\xff\x00\x8f\x3c\x65\xe0\x5d\x36\
|
||||
\xcf\x53\xf1\x3f\x87\xb4\xef\xb5\xda\xa5\xdd\xb4\xb7\x50\x5b\xa0\
|
||||
\x74\x13\x5c\xc9\x0c\x4c\xb2\x4c\xb0\x42\x64\x98\xc6\x8c\x19\xc4\
|
||||
\x5b\x41\x04\x8a\xf0\x6f\x1f\x7f\xc1\x4c\xbe\x20\x7e\xc7\xdf\x04\
|
||||
\x34\xef\x88\x9f\x1a\x3e\x1e\x68\x3e\x22\xf8\x67\x34\x30\xdd\x5c\
|
||||
\xf8\xf7\xe1\xae\xb0\x6f\xb4\xf8\x2d\xa7\x09\xe4\x5d\x49\x63\x74\
|
||||
\xb1\xcf\x1c\x72\x17\x5e\x52\x49\x80\x2c\xa3\x71\xc8\xc8\x07\xda\
|
||||
\xf4\x57\x8e\x7e\xca\xdf\xf0\x50\x4f\x82\xff\x00\xb6\xbf\x83\xe1\
|
||||
\xd6\xbe\x18\xfc\x47\xf0\xb7\x8a\xad\xe4\x00\xbd\xbd\xbd\xea\xa5\
|
||||
\xed\xa9\x3f\xc3\x2d\xbb\xe2\x58\xdb\xd9\x94\x67\xb6\x6b\xd8\xe8\
|
||||
\x00\xa2\xbe\x49\xff\x00\x82\x80\x7f\xc1\x6e\xff\x00\x67\x5f\xf8\
|
||||
\x26\xfc\x37\x16\x7e\x3c\xf1\xc5\xad\xf7\x8a\xa1\x52\x57\xc3\x1a\
|
||||
\x16\xdd\x43\x56\x27\x9e\x1e\x35\x60\xb0\xfd\x66\x64\xf6\xcd\x7c\
|
||||
\x51\xf1\x37\xfe\x0f\x47\xfd\x9f\x7c\x3a\x92\x7f\xc2\x2b\xf0\xff\
|
||||
\x00\xe2\x47\x89\xda\x34\x8d\x81\xb8\x5b\x6d\x35\x19\x9b\xef\x28\
|
||||
\xcc\x8e\xdf\x2f\xae\xdc\x1e\xd4\x01\xfb\x1b\x45\x7f\x3b\x7f\x19\
|
||||
\xff\x00\xe0\xf7\x3f\x19\x5d\xeb\x93\x2f\xc3\xef\x82\xde\x18\xd3\
|
||||
\xb4\xd5\x38\x8a\x4d\x7b\x52\x9e\xf6\x77\x1e\xac\xb0\xf9\x2a\xa7\
|
||||
\xd8\x16\xfa\xd7\x07\xa3\xff\x00\xc1\xec\x3f\x1f\x6d\x2e\xc3\x5e\
|
||||
\xfc\x2e\xf8\x4b\x79\x06\x79\x48\xe3\xbf\x85\xb1\xec\xdf\x68\x61\
|
||||
\xfa\x50\x07\xf4\xc1\x58\x3f\x14\x7c\x7f\x67\xf0\xab\xe1\xbe\xbd\
|
||||
\xe2\x6b\xf0\xcd\x67\xa0\xd8\x4d\x7f\x2a\xa9\xf9\xa4\x11\xa1\x6d\
|
||||
\xa3\xfd\xa6\xc6\x07\xb9\x15\xf8\x63\xf0\x37\xfe\x0f\x74\xd3\xef\
|
||||
\xee\xa3\x87\xe2\x27\xc0\xd9\xac\xe3\x66\x02\x4b\x9d\x03\x5f\x12\
|
||||
\x32\x8e\xe4\x45\x3c\x4a\x0f\xd0\xca\x2b\xf4\x53\xe1\xc7\xfc\x15\
|
||||
\x07\xe0\xbf\xfc\x15\x1b\xe0\x8f\x86\xed\x7e\x18\xf8\x9a\x3b\xfb\
|
||||
\x8f\x11\x78\x97\x4a\xb4\xd5\x34\x0b\xf4\xfb\x26\xaf\x61\x6e\x97\
|
||||
\x2b\x73\x2f\x9b\x6e\xc7\x26\x36\x8e\xdd\xd7\xcc\x42\xf1\x90\xd8\
|
||||
\x0c\x7a\x50\x07\x5d\xf0\x87\xf6\xd1\xf1\x27\xc2\xcf\xda\x83\x41\
|
||||
\xf8\x33\xf1\xc3\xfb\x3a\xc7\xc4\x5f\x11\x34\x81\xae\xf8\x27\x5c\
|
||||
\xb6\x87\xec\xd6\x3a\xbc\xca\xa1\xaf\xb4\x56\x19\x21\x6e\xed\x09\
|
||||
\x0c\x87\x3f\xbe\x85\x95\xb8\x75\x60\x7e\xaa\xaf\x8b\x3f\xe0\xe0\
|
||||
\x0f\xd9\xbe\xf3\xf6\x82\xff\x00\x82\x63\xf8\xea\xff\x00\x41\x4b\
|
||||
\x98\xfc\x69\xf0\xc7\xc9\xf1\xdf\x86\xef\x2c\xdc\xc5\x79\x65\x75\
|
||||
\xa7\x38\x9d\xde\x09\x17\xe6\x49\x0c\x02\x65\x05\x79\xc9\x15\xc3\
|
||||
\x7f\xc1\xbd\xff\x00\xf0\x59\xbb\x5f\xf8\x2a\x7f\xec\xfb\x7d\xa3\
|
||||
\x78\x9a\xea\xc9\x7e\x2d\x7c\x3d\x58\xa0\xd6\x96\x30\x21\xfe\xdc\
|
||||
\xb5\x60\x04\x5a\x94\x71\x7f\x06\xe3\x94\x95\x57\x2a\x92\x0c\x8c\
|
||||
\x2c\x88\x28\x03\xf4\x32\x8a\x28\xa0\x02\x8a\x28\xa0\x06\x5c\x5b\
|
||||
\xc7\x79\x6f\x24\x33\x46\xb2\x45\x2a\x94\x74\x61\x95\x75\x3c\x10\
|
||||
\x47\xa1\xaf\x92\x7f\xe0\x99\x1f\x0f\x74\x2f\x8c\x5f\xf0\x4b\xcd\
|
||||
\x33\xe1\xbf\x8b\xf4\xcb\x4d\x7f\x41\xd3\x64\xd7\x7c\x0d\xaa\x69\
|
||||
\x97\xa9\xe6\x45\x2d\xb5\x9e\xa9\x79\x64\x20\x60\x7b\x08\x62\x40\
|
||||
\x31\xd3\x00\x8c\x60\x57\xd7\x35\xf2\x7f\xc0\x2b\xc9\x3f\x63\xcf\
|
||||
\xdb\x87\xc7\x9f\x0c\xf5\x80\x6d\xfc\x23\xf1\xa3\x55\xb8\xf1\xd7\
|
||||
\x81\x6f\xdb\x88\x4e\xa5\x24\x6a\x75\x7d\x24\xb7\x41\x2f\x98\x9f\
|
||||
\x6c\x8d\x7f\x8d\x27\x9f\x19\xf2\x9a\x80\x3f\x9f\xcf\xf8\x2c\xe7\
|
||||
\xfc\x10\x8b\xe2\x67\xfc\x11\xe7\xe2\x95\xd7\xc5\x4f\x84\x7a\x86\
|
||||
\xbd\xa9\x7c\x20\x6b\x8f\x36\xcf\x59\xb3\x99\x86\xa1\xe1\x62\xef\
|
||||
\x81\x6d\x78\x57\xac\x7b\x88\x55\x9b\xee\xb8\x20\x30\x0d\xc1\xf2\
|
||||
\x0f\x08\x7f\xc1\xc3\xdf\xb4\xce\x91\xfb\x3d\x6b\x1f\x0e\xb5\x2f\
|
||||
\x88\xfe\x20\xbc\xd1\xef\x97\x6d\xb4\xb6\xaf\x1d\x9d\xf4\x00\xae\
|
||||
\xd6\x8b\xed\x4a\xbe\x6a\xc2\x7a\x94\x8c\xa9\x27\x20\x32\x82\x6b\
|
||||
\xee\x6f\xf8\x3b\x97\xfe\x0b\x01\x75\xe3\x7f\x88\xb2\x7e\xcb\xfe\
|
||||
\x03\xd4\xb6\x68\x3e\x1d\x68\xee\x7c\x6d\x73\x03\x7f\xc7\xf5\xef\
|
||||
\x0f\x15\x96\x7f\xbb\x08\xda\xee\x3f\xe7\xa1\x00\xf2\x95\xf8\x5f\
|
||||
\x40\x16\x35\x6d\x5a\xe7\x5d\xd4\xa7\xbc\xbc\x9a\x5b\x8b\xab\xa9\
|
||||
\x1a\x59\x65\x91\x8b\x34\x8e\xc7\x25\x89\x3c\x92\x7d\x4d\x57\xa2\
|
||||
\x8a\x00\x28\xa2\x8a\x00\x2b\xf4\x47\xfe\x0d\x7e\xf8\xdd\xa4\x7c\
|
||||
\x2d\xff\x00\x82\xbe\xfc\x35\xb7\xf1\x46\xa8\x2c\xf4\x8d\x59\x2f\
|
||||
\xb4\xeb\x2f\xb4\x49\x88\x63\xbe\x9a\xd6\x44\x83\xaf\x00\xb3\x31\
|
||||
\x41\xd0\x65\xc7\xb5\x7e\x77\x55\xef\x0d\x78\x8e\xf7\xc1\xfe\x22\
|
||||
\xb0\xd5\xb4\xdb\x89\x2d\x35\x0d\x2e\xe2\x3b\xbb\x59\xe3\x38\x68\
|
||||
\x65\x46\x0c\xac\x3d\xc3\x00\x68\x03\xfb\xe1\xd5\x34\xdb\x1f\x18\
|
||||
\x78\x72\xe2\xce\xe1\x61\xbd\xd3\x75\x4b\x66\x86\x55\xc8\x68\xe7\
|
||||
\x8a\x45\x20\x8f\x42\xac\xa7\xf1\x06\xbf\x8c\x4f\xd9\xe7\xf6\x8f\
|
||||
\xf1\x37\xfc\x11\x8f\xfe\x0a\xc7\x79\xe2\x2d\x0d\x6e\x1b\xfe\x15\
|
||||
\xaf\x8b\x2f\xf4\x4d\x4f\x4f\x0f\xb4\x6a\xda\x62\xdc\x3c\x33\xdb\
|
||||
\xb7\x6f\x9e\x21\x95\x27\x21\x5d\x51\xba\xa8\xaf\x70\xfd\x85\x3f\
|
||||
\xe0\xe5\xef\x8f\x5f\xb2\xcc\x27\x45\xd4\xf5\xcb\x7d\x5f\x43\x68\
|
||||
\xed\x2d\x2d\x5e\xea\xd4\xdc\x7f\x64\xda\xc1\x34\x92\x0b\x78\x60\
|
||||
\xde\x23\x58\xd9\x65\x74\x24\x28\x90\x05\x8f\x0d\x84\xda\x7c\x5f\
|
||||
\xfe\x0a\x91\xf1\xf3\xc0\x9f\xb7\x4f\xc6\xe3\xf1\x5f\xc2\xf7\xba\
|
||||
\x7e\x9f\xe2\x2f\x14\x41\x68\x3c\x41\x65\x24\x0b\x61\xe6\x5e\x6c\
|
||||
\x21\xa6\x75\xc0\x8f\xcc\x2a\x14\x4b\x24\x78\x8d\x99\x77\xe1\x0c\
|
||||
\x8c\x8a\x01\xfd\x8e\x7c\x1e\xf8\xb5\xa0\x7c\x7a\xf8\x53\xe1\xcf\
|
||||
\x1b\x78\x57\x50\x87\x56\xf0\xdf\x8a\xf4\xe8\x35\x5d\x36\xee\x23\
|
||||
\x95\x9e\x09\x90\x3a\x37\xb1\xc3\x0c\x83\xc8\x39\x07\x91\x5d\x25\
|
||||
\x7e\x1b\xff\x00\xc1\xa6\xdf\xf0\x54\x4d\x23\x48\xf8\x67\xa4\x7e\
|
||||
\xcb\x7e\x32\x76\xd2\xf5\xfb\x67\xbc\xbe\xf0\xb4\xb7\x53\xb3\x7d\
|
||||
\xb4\x3b\xb5\xc4\x96\xca\x49\xda\x32\xa5\xe4\x8c\x2e\x01\x0b\x20\
|
||||
\xe4\xed\x2d\xfb\x91\x40\x05\x14\x51\x40\x05\x7c\xc7\xff\x00\x05\
|
||||
\x87\xf8\xe7\xe0\xcf\xd9\x9b\xfe\x09\xe9\xf1\x03\xc7\xfe\x34\xd3\
|
||||
\xe1\xd4\xa1\xf0\xa5\xb4\x77\xda\x24\x26\x53\x0c\xeb\xac\x07\x0b\
|
||||
\x60\xf0\x4a\xa4\x3c\x72\xac\xec\x84\x3a\x10\xc1\x43\x76\xc8\x3f\
|
||||
\x4e\x57\xe1\xbf\xfc\x1e\xbb\xfb\x55\x2f\x86\xbe\x03\xfc\x2c\xf8\
|
||||
\x37\x6b\x20\x37\x1e\x28\xd4\xa5\xf1\x2e\xa0\x81\xb0\x52\x1b\x51\
|
||||
\xe5\x41\x9f\x50\xcf\x2c\xbf\x8c\x7e\xd4\x01\xfc\xf0\xf8\xfb\xc7\
|
||||
\x5a\xb7\xc5\x0f\x1c\x6b\x1e\x24\xd7\xaf\xae\x35\x4d\x73\x5e\xbd\
|
||||
\x9b\x50\xbf\xbc\x9d\xb7\x49\x73\x3c\xae\x5e\x47\x63\xea\x59\x89\
|
||||
\xfc\x6b\x26\x8a\xfd\x0c\xff\x00\x82\x00\x7f\xc1\x1c\x97\xfe\x0a\
|
||||
\x5f\xf1\xa7\x56\xf1\x67\x8e\x05\xc5\x8f\xc1\x5f\x86\x2a\x2f\xbc\
|
||||
\x45\x32\x13\x1b\xeb\x12\xaa\x99\x12\xc2\x37\xfe\x1d\xca\xa5\xa4\
|
||||
\x61\xca\xa0\xc0\xc3\x32\x9a\x00\xfc\xf3\xa2\xba\x2f\x8b\xbe\x28\
|
||||
\xb7\xf1\xb7\xc5\x4f\x11\xea\xf6\x76\x96\xba\x7d\x96\xa5\xa9\x5c\
|
||||
\x5c\x5b\x5a\xdb\x46\x23\x86\xda\x26\x91\x8a\x46\x8a\x38\x0a\xab\
|
||||
\x85\x03\xd0\x57\x3b\x40\x16\x34\xbd\x22\xef\x5b\xba\x30\x59\xda\
|
||||
\xdc\x5e\x4c\xb1\xbc\xc6\x38\x63\x32\x30\x44\x42\xee\xd8\x1c\xed\
|
||||
\x54\x56\x62\x7a\x00\xa4\x9e\x05\x57\xaf\xbb\xbf\xe0\xda\xbf\x87\
|
||||
\x31\xfc\x51\xff\x00\x82\xc8\xfc\x2a\xd2\xee\x6c\xe1\xbe\xd3\x5e\
|
||||
\x3d\x55\xb5\x0b\x79\xa3\xf3\x22\x9e\xd8\xe9\x97\x4b\x2a\x38\xe8\
|
||||
\x55\x95\x8a\x9c\xff\x00\x7a\xb8\x6f\xf8\x2d\x1f\xfc\x13\xff\x00\
|
||||
\x4b\xff\x00\x82\x79\xfe\xdc\x7e\x28\xf0\x9f\x85\x75\x9b\x3f\x10\
|
||||
\x78\x1a\xf2\xe5\xee\xf4\x3b\xab\x69\xbc\xef\xb1\xc6\xcc\x77\x59\
|
||||
\x4c\xc3\x8f\x3a\x06\xca\x11\xd4\x80\xad\xc6\x71\x40\x1f\x25\x51\
|
||||
\x45\x14\x00\x51\x45\x14\x01\xd5\x7c\x1d\xf8\xc7\xe2\x0f\x81\xff\
|
||||
\x00\x14\x3c\x37\xe2\xef\x0d\xea\x37\x1a\x7e\xbd\xe1\x3d\x46\x0d\
|
||||
\x53\x4c\xb9\x47\x39\xb6\x9e\x19\x04\x88\x47\xb6\xe0\x32\x3b\x8c\
|
||||
\x8e\xf5\xfd\xc1\x7e\xc5\x5f\xb4\xde\x97\xfb\x66\x7e\xc9\xbf\x0f\
|
||||
\xbe\x29\x68\xfb\x56\xcb\xc6\xda\x25\xbe\xa4\x62\x5f\xf9\x76\x99\
|
||||
\x97\x13\x43\xf5\x8e\x51\x22\x1f\x74\xaf\xe1\x51\x4e\x18\x57\xf5\
|
||||
\x01\xff\x00\x06\x71\x7e\xd2\x8f\xf1\x27\xf6\x06\xf1\x77\xc3\x9b\
|
||||
\xb9\xcc\x97\x5f\x0e\x3c\x42\x2e\x2d\x15\x9f\x25\x2c\xb5\x08\xfc\
|
||||
\xe5\x00\x7a\x0b\x88\xee\xbf\x3a\x00\xfd\x7b\xa2\x8a\x28\x00\xaf\
|
||||
\xe4\x5b\xfe\x0e\x87\xfd\xab\x47\xed\x37\xff\x00\x05\x65\xf1\xa5\
|
||||
\x9d\xac\x8d\x26\x97\xf0\xee\x38\xbc\x2f\x6a\x77\xee\x52\x61\x5d\
|
||||
\xd3\x15\xf6\xf3\x9e\x4a\xfe\xb2\xfe\x28\xf8\xc5\x7e\x1d\xfc\x33\
|
||||
\xf1\x17\x88\x1b\x69\x5d\x0f\x4c\xb9\xbf\x20\xf4\x3e\x54\x4c\xf8\
|
||||
\xff\x00\xc7\x6b\xf8\x79\xfd\xbb\x3c\x49\xff\x00\x09\x6f\xed\x8d\
|
||||
\xf1\x2b\x50\xf3\x1a\x66\xb9\xf1\x05\xdb\x33\xb1\xcb\x3b\x07\x20\
|
||||
\x93\xf5\x20\x9a\x00\xf3\x5f\x0c\x78\x6e\xfb\xc6\x5e\x24\xd3\xf4\
|
||||
\x8d\x36\xde\x5b\xcd\x47\x54\xb9\x8e\xd2\xd6\x08\xd7\x73\xcd\x2c\
|
||||
\x8c\x15\x14\x0e\xe4\xb1\x03\xf1\xaf\xeb\xeb\xf6\x64\xff\x00\x82\
|
||||
\x5b\x78\x4f\xf6\x15\xff\x00\x82\x5a\x58\xf8\x5e\xdf\x4f\x92\xf3\
|
||||
\xc7\x9e\x0b\xf0\x4e\xad\x79\x73\x3c\x37\xb3\x2a\x4b\xac\x5d\xd8\
|
||||
\xcb\xf6\x99\x0c\x48\xe2\x39\x1b\x27\xca\x47\x75\x2c\x12\x35\x00\
|
||||
\x8a\xfe\x57\x3f\x61\x4f\x88\xf6\x1f\x02\x3e\x3f\xe9\x7f\x11\xb5\
|
||||
\x38\x74\x8b\x9b\x7f\x01\x93\xaa\xdb\xc1\xa9\x43\x24\xf0\xdd\x5d\
|
||||
\xaf\x16\xf1\x88\xa3\x64\x69\x1b\xcc\x2a\xc1\x77\xa2\xfc\x84\xb3\
|
||||
\x00\x39\xf7\xfb\x0f\xf8\x38\x6b\xf6\x94\xf0\xb7\xc4\x4d\x67\x5e\
|
||||
\xf0\xe6\xbd\xe1\x3f\x0f\x7f\x6e\x42\xf6\x77\x50\x59\x78\x47\x4d\
|
||||
\x8d\x2e\x2d\x98\x9c\xc7\x21\xf2\x77\x37\xd4\xb6\x73\xde\x80\x3e\
|
||||
\x1e\xb9\x84\xdb\xdc\x49\x19\xeb\x1b\x15\x3f\x85\x32\xa6\xd4\x2e\
|
||||
\xda\xfe\xfe\x69\xdf\x6e\xf9\xa4\x69\x1b\x68\xc0\xc9\x39\xe0\x54\
|
||||
\x34\x01\xfb\x29\xff\x00\x06\x5e\xfe\xcf\x32\x78\xdb\xf6\xec\xf1\
|
||||
\xe7\xc4\x8b\x88\x5b\xfb\x3b\xe1\xff\x00\x85\xda\xd5\x27\x23\xe5\
|
||||
\x4b\xab\xd9\x02\x28\xcf\x6f\xdc\xc5\x71\x5f\xae\xdf\xf0\x56\xe9\
|
||||
\xff\x00\x66\x7f\xdb\x6b\xf6\x67\xd4\xbe\x15\xfc\x46\xd7\x22\x5b\
|
||||
\x5b\xe9\xc7\xf6\x57\x88\xac\x6d\xc3\x43\xe1\xdb\xf0\x76\xa5\xd4\
|
||||
\x77\x2e\x56\x16\x08\x49\x12\x22\x39\xca\x6f\x07\x1d\x47\x85\x7f\
|
||||
\xc1\x0d\x3f\xe0\x98\x7e\x3c\xfd\x9d\xbf\xe0\x91\xbe\x1d\xf0\xf6\
|
||||
\x9c\xf6\x3e\x11\xf1\x57\xc7\x8b\xa3\xe2\x4f\x18\x6b\x57\x96\xcb\
|
||||
\x71\x75\xa1\x69\x4f\x12\x8b\x6b\x78\x2d\xdf\xe5\x7b\x86\x80\x29\
|
||||
\x1e\x68\x29\x13\x4f\x29\x65\x72\xa1\x1b\xf0\x03\xfe\x0a\x81\xfb\
|
||||
\x4c\x69\xbf\x1b\xff\x00\x6b\x1f\x19\x47\xe1\x3f\xed\x01\xe1\x3d\
|
||||
\x1f\x50\x9b\x48\xd2\xee\x75\x0b\xd9\x2f\xaf\xf5\x0b\x68\x1c\xc6\
|
||||
\x2e\x26\x9e\x42\x58\xb4\xc5\x4c\x85\x53\x6a\x28\x65\x55\x55\x55\
|
||||
\x02\x80\x3c\xbb\xf6\xab\xfd\x9b\x75\x4f\xd9\x3b\xe3\x96\xb9\xe0\
|
||||
\x9d\x53\x54\xf0\xff\x00\x88\x1b\x49\x9c\xad\xb6\xad\xa1\x6a\x31\
|
||||
\x6a\x1a\x6e\xab\x01\xe6\x39\xe1\x9a\x36\x2a\x55\x97\x07\x07\x0c\
|
||||
\xa7\x20\x80\x41\x15\xe7\x55\x7d\x3c\x43\x33\x68\xc3\x4f\x99\x63\
|
||||
\x9a\xd5\x18\xbc\x41\x94\x6f\x85\x8f\x52\xad\xd4\x03\x8e\x47\x43\
|
||||
\xe9\x9e\x6b\xd1\xfe\x32\xfe\xc5\x3f\x12\xfe\x05\xfc\x27\xf0\x4f\
|
||||
\x8f\xb5\xff\x00\x09\xea\xf6\xbe\x07\xf8\x89\xa7\xae\xa5\xa0\x6b\
|
||||
\x62\x02\xf6\x77\x88\x49\x05\x0c\x83\x84\x91\x4a\x9c\xa3\x60\x91\
|
||||
\x86\x00\xa9\x06\x80\x3c\xa6\x8a\x28\xa0\x02\xbf\x6c\xff\x00\xe0\
|
||||
\xcb\x5f\x89\xb3\x69\x3f\xb6\x5f\xc4\x0f\x0c\x33\xb0\xb7\xd7\xbc\
|
||||
\x12\x6e\x0a\xe7\xe5\x69\x2d\x2f\xa3\xd8\x71\xea\x12\xe6\x41\xf8\
|
||||
\xd7\xe2\x65\x7e\xb7\x7f\xc1\xa0\x1e\x26\xb5\xd0\x7f\xe0\xa5\x9a\
|
||||
\x7c\x12\x17\xfb\x56\xb5\xa1\x6b\x5a\x6c\x63\xf8\x71\xe5\x5a\xdc\
|
||||
\x8f\xfd\x27\x7f\xce\x80\x3f\xa8\xea\x28\xa2\x80\x3c\xbf\xf6\xcf\
|
||||
\x2f\x27\xec\xc3\xe2\xeb\x78\xdb\x6b\x5f\xdb\x25\x89\x27\xd2\x79\
|
||||
\xa3\x84\xfe\x8e\x6b\xf8\x9c\xfd\xb2\x34\x1b\x8f\x0c\x7e\xd6\xff\
|
||||
\x00\x14\x34\xeb\xa4\x68\xe7\xb1\xf1\x66\xab\x6e\xea\x47\x2a\x52\
|
||||
\xf2\x55\x23\xf4\xaf\xee\x27\xe3\x6f\x80\x24\xf8\xa3\xf0\xab\x5a\
|
||||
\xd0\xa1\x99\x60\xb8\xbe\x80\x79\x12\x30\xf9\x52\x54\x61\x22\x13\
|
||||
\xed\xb9\x57\x3e\xd5\xfc\x93\xff\x00\xc1\xc5\xbf\xb2\x56\xa5\xfb\
|
||||
\x3e\xff\x00\xc1\x4f\xfe\x32\x6a\x1f\x63\x92\x2d\x1f\x5c\xf1\x02\
|
||||
\x6b\xd0\x36\xcc\x2f\x97\xa9\xc6\xd7\x4a\x47\xb7\x9c\xb7\x49\xec\
|
||||
\x63\x22\x80\x3e\x78\x87\xf6\x5b\xd6\x13\xfe\x09\xd9\x2f\xc6\x2f\
|
||||
\x29\xbf\xb1\x24\xf1\xbf\xfc\x23\x3e\x66\x38\xf3\x56\xd1\x66\xc7\
|
||||
\xe2\x1b\xff\x00\x1d\x35\x3f\xed\x57\xe0\xef\x80\xfe\x1f\xfd\x9e\
|
||||
\x7e\x06\x6a\x1f\x0a\x7c\x4d\xe2\x0d\x63\xe2\x06\xb1\xa1\x5c\xc9\
|
||||
\xf1\x27\x4f\xd4\x22\x65\x83\x48\xd4\x16\x65\x11\x2c\x04\xc6\xa0\
|
||||
\xab\x29\x93\x85\x67\x1b\x52\x32\x48\x66\x22\xbf\x63\x3f\xe0\xdd\
|
||||
\xff\x00\xd9\xb3\xc1\x5f\xf0\x54\x7f\xf8\x22\x57\xc6\x2f\xd9\xaf\
|
||||
\xc6\x30\xff\x00\x67\x9d\x1f\xc5\x11\xea\x76\xfa\x9d\xaa\x06\xb9\
|
||||
\xd3\xee\x2e\xad\xa3\x9a\xd6\xed\x73\xc1\x64\x78\x64\x52\x38\xdd\
|
||||
\x1e\xe5\x38\xc9\x35\xf2\xb7\x89\xff\x00\xe0\xce\x8f\xda\xc7\x4b\
|
||||
\xf8\x91\x75\xa4\xe9\xb7\x5f\x0d\x75\x5d\x0e\x36\xcc\x1a\xe9\xd7\
|
||||
\x1a\xde\x09\x97\x23\xac\x2d\x11\x99\x58\x0e\x48\xda\x47\x1c\x31\
|
||||
\xe3\x20\x1f\x9e\xfa\xbf\xec\xbb\xab\x69\x1f\x03\x5b\xc7\x53\xc7\
|
||||
\x71\x0e\x9a\xda\x55\x86\xa5\x13\x3a\x61\x66\xfb\x55\xed\xdd\xa2\
|
||||
\x80\x7b\xf3\x67\x31\xff\x00\x80\x9a\xfb\xcf\xfe\x0d\xc3\xff\x00\
|
||||
\x82\x20\x6a\x1f\xf0\x50\x5f\xda\x07\x4c\xf8\x8d\xe3\xad\x26\x64\
|
||||
\xf8\x3b\xe0\x3b\xe4\xbb\xbd\xfb\x44\x65\x62\xf1\x15\xe4\x78\x78\
|
||||
\xb4\xf4\xcf\xdf\x4c\xed\x79\x88\xe1\x50\x04\xce\xe9\x3e\x5f\xde\
|
||||
\xef\x86\x9f\xf0\x44\x4f\x82\x5a\x7f\xec\x65\xf0\xd3\xe1\x0f\x8e\
|
||||
\x3c\x37\x6b\xe3\x0b\x3f\x02\xe9\xba\x75\xad\xe5\xcb\x49\x2d\xb0\
|
||||
\xd6\xe6\xb4\x69\xe6\xcc\xc1\x18\x16\x84\xdc\x5d\x5c\xc8\x22\x62\
|
||||
\x47\xef\x30\x73\x8a\xfa\xbb\xe1\xf7\xc3\xcd\x07\xe1\x3f\x83\x34\
|
||||
\xff\x00\x0e\xf8\x67\x47\xd3\x7c\x3f\xa0\xe9\x30\x88\x2c\xb4\xfb\
|
||||
\x0b\x75\xb7\xb7\xb6\x41\xfc\x28\x8a\x00\x1d\xcf\xb9\x24\xf5\x34\
|
||||
\x01\x37\x8a\x74\x99\xb5\x5f\x08\xea\x56\x36\x6e\xb6\xd3\xdc\xd9\
|
||||
\xcb\x04\x0e\x38\x11\x33\x21\x55\x3f\x81\x23\xf2\xaf\xe1\x87\xe1\
|
||||
\x77\x8a\xee\xff\x00\x64\x0f\xda\xfb\xc3\xfa\xdf\x88\x34\x1b\x5d\
|
||||
\x77\x50\xf8\x65\xe2\xe8\x2e\xf5\x3d\x16\xf7\xfd\x4d\xec\xb6\x37\
|
||||
\x81\xa5\xb6\x90\x90\x78\x66\x89\x94\x92\x0f\x5e\x87\xa5\x7f\x76\
|
||||
\x15\xf8\xef\xff\x00\x05\x75\xff\x00\x83\x4e\xfc\x3d\xfb\x73\xfc\
|
||||
\x7b\xd6\xbe\x2a\x7c\x29\xf1\xb5\xa7\xc3\xbf\x15\x78\xaa\xe0\xde\
|
||||
\x6b\xba\x4e\xa5\x62\xd7\x1a\x55\xfd\xd3\x7f\xac\xb9\x8d\xa3\x22\
|
||||
\x48\x1d\xcf\xcc\xe3\x6b\xab\x31\x66\x1b\x49\x39\x00\xfe\x7b\x3f\
|
||||
\x6f\xff\x00\xda\x8a\xc7\xf6\xd4\xfd\xb2\xbe\x21\x7c\x54\xd3\x3c\
|
||||
\x2b\x67\xe0\x8b\x1f\x1b\x6a\x87\x50\x87\x45\xb6\x90\x4a\x96\x43\
|
||||
\x62\x21\xcb\xaa\x20\x67\x62\xa5\xd9\x82\x8c\xb3\xb1\xc5\x7e\xec\
|
||||
\xfc\x7b\xf8\x13\xac\x37\xfc\x19\x93\xe1\x7b\x3d\x69\x6e\xad\x75\
|
||||
\x6d\x07\xc3\x9a\x77\x89\xa1\x07\x2a\xe9\x0b\x6a\xa2\xe2\x1c\xf7\
|
||||
\xc1\xb7\x9d\x7e\x99\xaf\x31\xf8\x2b\xff\x00\x06\xa1\xfc\x25\xfd\
|
||||
\x91\x3e\x2a\x78\x27\x50\xfd\xa6\x7e\x3a\x59\xeb\x50\xea\xd7\x8e\
|
||||
\xd6\xbe\x15\xd0\xf4\x99\x6d\xe1\xd5\x3e\xce\xbe\x6c\xa6\x6b\x92\
|
||||
\xcd\x22\xda\x46\x83\x74\xd2\x18\xe2\x54\x53\xcc\x89\x90\x4f\xe9\
|
||||
\x77\xfc\x16\x2f\xc7\x3e\x0c\xf8\xb1\xff\x00\x04\x3e\xf8\xf1\x75\
|
||||
\xe0\xbd\x57\x43\xd6\x3c\x33\x67\xe1\x79\xac\xe0\x9b\x4a\x95\x24\
|
||||
\xb3\x88\xdb\xcb\x1a\x98\x90\xa7\xcb\x84\x2a\x17\x03\x81\x8c\x76\
|
||||
\xa0\x0f\xe3\xa6\xea\xe9\xef\x27\x69\x24\x21\xa4\x73\x96\x20\x01\
|
||||
\x93\xf8\x54\x74\x51\x40\x05\x7e\xc4\x7f\xc1\xaa\xbf\x09\x5b\x4d\
|
||||
\xfd\xaa\xfe\x10\xf8\xf3\xec\xf2\x08\xf5\x0f\x13\x78\x97\x42\x69\
|
||||
\x73\xf2\xb3\x27\x87\xfc\xe5\x1f\x80\x2f\x5f\x8e\xf5\xfd\x49\x7f\
|
||||
\xc1\xae\xdf\xb1\x43\x78\x63\xfe\x09\xbd\xf0\xc3\xc5\x1a\xe6\x9f\
|
||||
\x2d\x8e\xb1\x63\xe3\xad\x73\xc5\x10\x09\x17\x6c\x83\x7d\x9c\x9a\
|
||||
\x56\xd3\xe9\xc6\xf3\x8f\xf6\x45\x00\x7e\xb5\x51\x45\x14\x00\x57\
|
||||
\xc7\xdf\xf0\x57\x2f\xf8\x25\x0f\x87\x7f\xe0\xa5\xdf\x06\xf5\x6b\
|
||||
\x36\xfb\x35\x8f\x8b\x7f\xb0\x6e\xb4\xbb\x1b\xb9\x23\x1b\x64\x62\
|
||||
\xc9\x3d\xb6\xf6\xea\x3c\xab\x88\x94\x83\xd9\x65\x9c\x63\xe7\x35\
|
||||
\xf6\x0d\x14\x01\xf8\x37\xff\x00\x06\x65\x49\x6f\xf0\xaf\xe2\xc7\
|
||||
\xed\x49\xf0\xd3\x56\xba\x6b\x7f\x16\xe8\xf7\x9a\x52\xc9\x61\x32\
|
||||
\xf9\x72\xb2\x59\xc9\x7b\x6b\x3b\x6c\xc9\xff\x00\x57\x2b\x22\xb7\
|
||||
\x27\x05\xd7\xd6\xbf\x79\x2b\xf9\x65\xfd\xbb\x3e\x2a\xf8\xeb\xfe\
|
||||
\x08\x8f\xff\x00\x07\x0d\xfc\x50\xf8\x9f\xe0\xdb\x1b\x7b\xff\x00\
|
||||
\x33\x56\x3e\x23\x96\xc2\xf0\xed\xb7\xd6\x74\x8d\x5c\x09\x2e\x21\
|
||||
\x2c\x06\x55\x44\xec\xc8\x24\x19\xd8\xe8\x84\x86\xc1\x07\xf6\x23\
|
||||
\xe0\xd7\xfc\x1c\x4f\xf0\x9f\xf6\xd6\xf8\x0c\x63\xf8\x23\x71\x0d\
|
||||
\xf7\xc7\x8d\x68\xc1\xa6\x68\x9f\x0f\x7c\x46\x4d\x8d\xd7\xf6\x84\
|
||||
\xec\xa9\xe6\x3b\x80\x52\x6b\x58\x01\x79\xa5\x92\x16\x27\xca\x85\
|
||||
\xb8\x56\x20\x50\x07\xd2\x3f\xb6\x4f\xed\xdf\x6b\xfb\x3a\x6b\x9a\
|
||||
\x47\x80\xfc\x1b\xe1\xfb\xaf\x89\x5f\x1b\x3c\x61\x13\x3f\x87\x7c\
|
||||
\x19\xa7\xcc\x23\x73\x10\x3b\x5a\xfe\xfa\x63\x95\xb3\xb0\x8c\x9f\
|
||||
\x9e\x79\x3a\x9f\x95\x03\xb7\x03\xc9\x3e\x14\xfe\xc4\x1f\xb5\x9f\
|
||||
\x83\x34\x8b\xdd\x62\xe3\xf6\xaa\xd3\x63\xf1\x37\x89\xb5\x3b\xad\
|
||||
\x63\x55\xd1\xe6\xf0\x34\x5a\xa6\x81\xa5\x49\x75\xb3\x75\xbd\x89\
|
||||
\x92\x74\xb9\x11\x5b\x88\xd4\x45\xba\x40\xa4\xf9\x8c\xc8\x7c\xc2\
|
||||
\x07\xb6\xfe\xc5\x9f\xb1\x56\x9b\xfb\x2a\x68\x1a\xa6\xad\xaa\x6a\
|
||||
\x52\x78\xcb\xe2\xa7\x8d\xa4\x5b\xef\x1a\x78\xce\xf6\x31\xf6\xcd\
|
||||
\x76\xeb\x1f\x71\x3f\xe7\x8d\xa4\x5f\x72\x0b\x74\xc2\x44\x80\x70\
|
||||
\x58\xb3\x37\xb7\xd0\x07\xc6\x5e\x0a\xf8\x55\xfb\x44\x7e\xc1\x1e\
|
||||
\x23\xd7\xbc\x49\x71\xe3\xad\x73\xf6\x9e\xf0\x16\xb4\xd1\xdf\xeb\
|
||||
\x5a\x6e\xa7\x04\x56\x7e\x2a\xd0\xa4\x8e\x20\x92\xc9\xa5\x47\x0a\
|
||||
\xad\xb5\xcc\x2c\x15\x58\xda\x30\x89\xc6\xcf\x91\xdd\xd8\x87\xfa\
|
||||
\x7b\xe0\x4f\xc7\xaf\x08\xfe\xd2\xff\x00\x0c\x74\xef\x18\xf8\x1f\
|
||||
\x5b\xb4\xd7\xfc\x3f\xaa\x06\xf2\xae\x20\xc8\x68\xdd\x4e\xd9\x22\
|
||||
\x95\x18\x07\x8a\x54\x60\x55\xe3\x70\x1d\x18\x10\xc0\x11\x8a\xeb\
|
||||
\xeb\xe2\xbf\xdb\x0b\xc0\x3a\x9f\xfc\x13\xc7\xe2\x86\xab\xfb\x4c\
|
||||
\x7c\x37\xb2\xba\x9f\xc1\xf7\x8e\xb3\xfc\x63\xf0\x75\x92\x6e\x8b\
|
||||
\x55\xb2\x5c\x2b\xf8\x82\xd2\x21\xc2\xea\x16\xa9\xf3\xca\x17\x1f\
|
||||
\x69\x81\x18\x37\xce\x88\xc4\x03\xec\x6d\x53\xc3\x5a\x6e\xb8\xec\
|
||||
\xd7\xda\x7d\x8d\xe3\x34\x0f\x6a\x4c\xf0\x2c\x84\xc4\xfb\x4b\xc7\
|
||||
\xc8\x3f\x23\x6d\x5c\xaf\x43\xb4\x67\xa0\xaf\x89\xff\x00\xe0\xe2\
|
||||
\x2d\x7b\x4d\xf8\x41\xff\x00\x04\x44\xf8\xe5\x1d\xad\xbd\xae\x9d\
|
||||
\x6b\x3e\x91\x6f\xa5\xdb\xdb\xc1\x12\xc5\x1a\xb5\xcd\xfd\xbc\x58\
|
||||
\x55\x50\x00\xcf\x98\xc7\x8f\x7a\xfb\x5f\xc2\xbe\x29\xd3\xbc\x73\
|
||||
\xe1\x7d\x37\x5a\xd1\xef\x2d\xf5\x2d\x27\x58\xb5\x8a\xf6\xca\xee\
|
||||
\x07\xdf\x15\xd4\x12\x20\x78\xe4\x46\xee\xac\xac\x08\x3d\xc1\xaf\
|
||||
\xc9\xef\xf8\x3b\xfb\xe3\xee\x97\x61\xff\x00\x04\xfd\xd0\x7e\x12\
|
||||
\xe9\xba\x95\xad\xe7\x8c\xfe\x20\x78\xc3\x4b\x8c\x68\x96\xf2\xac\
|
||||
\x97\xcf\x68\x9e\x7c\xa2\x4f\x24\x1d\xfb\x5a\x68\xa2\x55\x38\xc1\
|
||||
\x6e\x07\x34\x01\xfc\xba\x30\xda\x68\x55\xdd\x9f\x61\x9a\xbb\xe2\
|
||||
\x4d\x3a\x4d\x1f\x5a\xb8\xb3\x9a\x36\x86\x7b\x57\x68\x65\x8d\xbe\
|
||||
\xf4\x6e\xa4\xab\x29\xf7\x04\x11\x56\x3c\x2f\xe0\xdb\xcf\x16\xcd\
|
||||
\x75\x15\xa7\x93\xbe\xde\x23\x21\x12\x48\x13\x79\x1d\x11\x73\xd5\
|
||||
\xce\x0e\x14\x72\x48\xc0\xe7\x02\x80\x13\xc0\xba\x1d\xd7\x89\xfc\
|
||||
\x6d\xa3\xe9\xb6\x36\xf2\x5e\x5f\x6a\x17\xb0\xdb\x5b\xdb\xa2\xee\
|
||||
\x69\xe4\x77\x0a\x88\x07\x72\xcc\x40\xfc\x6b\xfb\x98\xfd\x8b\x3e\
|
||||
\x01\xa7\xec\xb9\xfb\x26\xfc\x3d\xf8\x7e\x36\x99\xbc\x2f\xa2\x5b\
|
||||
\xda\x5d\xba\xf4\x96\xeb\x6e\xeb\x89\x3f\xe0\x53\x34\x8d\xff\x00\
|
||||
\x02\xaf\xe5\xe3\xfe\x08\x93\xff\x00\x04\xee\xf1\x17\x87\xff\x00\
|
||||
\xe0\xbe\x5f\x0d\x7e\x1b\xfc\x42\xd0\x66\xd3\x75\x2f\x87\xb7\x2d\
|
||||
\xe2\x7d\x5a\xc6\xe9\x39\x85\xed\x6c\xbe\xd7\x06\x47\x71\xe7\xb5\
|
||||
\xbf\xb5\x7f\x5a\xd4\x00\x51\x45\x14\x00\x51\x45\x14\x01\xf2\x07\
|
||||
\xfc\x14\xa3\xfe\x09\x07\xe0\xbf\xf8\x28\x4f\x8e\x3c\x27\xe3\x0b\
|
||||
\xa9\x21\xd2\xfc\x5d\xe1\xdb\x79\x74\x3b\xc9\xe5\x8b\xcd\xb7\xd6\
|
||||
\xf4\x3b\x9c\xad\xd5\x8c\xe8\x30\x72\x15\xdd\xe1\x90\x10\x63\x93\
|
||||
\x9e\x87\x8f\xcd\x8f\xf8\x20\xbf\xec\x79\xe0\x9f\xf8\x24\x07\xfc\
|
||||
\x14\x97\xe2\xc6\x87\xf1\xc3\xc4\xd3\x78\x37\xc7\x92\x33\x78\x63\
|
||||
\xc0\x57\x3a\xd5\xa7\xd8\x74\x3f\x15\xe9\x8e\xeb\x37\xda\xed\xaf\
|
||||
\xe4\x1e\x53\xdd\x48\x12\x20\x60\x0e\xac\xbf\x30\xc3\x92\x42\x7e\
|
||||
\xf3\x57\xc8\x5f\xf0\x5c\xed\x02\x1f\x19\xff\x00\xc1\x39\xfc\x4f\
|
||||
\xe1\xd9\x74\x3d\x3f\x58\xff\x00\x84\xb7\x56\xd1\xfc\x3a\x67\xbe\
|
||||
\xb1\x4b\xa8\x74\x48\xef\xb5\x1b\x7b\x59\xb5\x03\xbd\x48\x8b\xc8\
|
||||
\x86\x59\x5c\x4b\xc7\x96\x40\x6c\x8c\x66\x80\x3e\xbb\x8e\x45\x9a\
|
||||
\x35\x65\x65\x65\x61\x90\x41\xc8\x22\x9d\x5c\xef\xc2\x6b\xaf\x0c\
|
||||
\x4d\xf0\xe7\x48\x83\xc1\xb7\x9a\x4d\xf7\x86\x74\xdb\x64\xd3\xf4\
|
||||
\xf7\xd3\x2e\x52\xe2\xd6\x38\xa0\x1e\x50\x8d\x1d\x09\x5f\x93\x66\
|
||||
\xdc\x03\xc1\x5c\x57\x45\x40\x05\x56\xd6\x34\x8b\x5f\x10\x69\x17\
|
||||
\x5a\x7d\xf4\x11\xdd\x59\xdf\x42\xf6\xf3\xc3\x22\xee\x49\x63\x75\
|
||||
\x2a\xca\xc0\xf5\x04\x12\x08\xf7\xab\x35\xf9\x1f\xff\x00\x07\x3a\
|
||||
\xfe\xdf\xbe\x32\xfd\x89\x6e\x7c\x0f\xa7\xe8\xfe\x32\xf1\xff\x00\
|
||||
\x87\x34\x3f\x1e\xe8\x5a\x85\xaa\xa7\x85\xef\x21\xd3\x5e\xdb\x50\
|
||||
\x82\xea\xcc\xa4\xf3\x5d\x18\x24\x95\x63\x68\x26\x99\x36\xc6\x54\
|
||||
\xe4\x2b\x73\x82\x08\x07\x3b\xfb\x01\x2f\xc6\x4b\x5f\xda\x0a\x1f\
|
||||
\xd8\xf4\xfc\x66\xf1\x86\x9b\xe1\x3f\x84\xba\x87\x89\x74\x7d\x46\
|
||||
\x1f\x0e\xe9\xf6\x36\x7a\xd6\x99\xa1\x59\x8b\x19\x74\x3b\x96\xbd\
|
||||
\x96\x39\x64\x54\xb9\x8e\xfc\xc2\x36\xaa\x90\x6d\xf0\xad\x85\x26\
|
||||
\xbc\x0f\xe2\x64\x3f\x0b\x7f\x65\x7f\xf8\x28\x47\xc7\x1f\x10\x7c\
|
||||
\x4c\x97\xce\xf8\x95\xfb\x33\x78\x72\x3b\xaf\x87\xfa\x25\xf4\x93\
|
||||
\xea\xba\xa7\xc4\x5d\x5e\xfd\x47\xd9\x75\xdb\xbb\x89\x9e\x57\x9a\
|
||||
\x78\xbc\xeb\x45\x16\xca\x76\xc5\x82\xe8\xaa\xaa\x45\x74\x1f\xf0\
|
||||
\x4d\x6f\xf8\x28\x17\x83\x7f\x63\x3f\xd9\xdb\x51\xd0\xff\x00\x65\
|
||||
\x3f\x82\xdf\x16\xbf\x69\xef\x8f\x5e\x3f\x75\xbf\xf1\x67\x8b\xce\
|
||||
\x87\x79\x6f\xa2\x4d\x7d\x83\xb5\x5e\xf2\xe3\x33\x9b\x58\x0b\xb0\
|
||||
\x40\xe1\x0b\xfc\xce\xce\x8c\xe7\x17\xbf\x64\x5f\xf8\x37\x47\xf6\
|
||||
\x9c\xf8\xf9\xfb\x52\xf8\x93\xf6\x9a\xf8\xff\x00\xf1\x2b\x4f\xf8\
|
||||
\x77\xf1\x63\x53\x9e\x6d\x7b\x41\xb4\xd1\x4a\x5f\x5c\xe9\xda\xbe\
|
||||
\xc1\xf6\x39\x27\x2a\x4c\x11\xdb\x40\x56\x34\xf2\x11\xa5\x2f\x1a\
|
||||
\x6c\x2c\xbc\xe4\x03\xf3\xb7\xe0\x27\xfc\x11\x7f\xe2\x89\xfd\xa8\
|
||||
\xfc\x1f\xe0\xad\x6f\xc3\x70\xeb\xdf\x17\xbc\x51\x69\x1f\x89\x21\
|
||||
\xf0\x8d\xd8\x97\xca\xd0\xad\x26\x67\xf2\xaf\xf5\xc9\x02\xec\xb6\
|
||||
\xb7\x42\x04\xaf\x0e\xe6\x96\x43\xb2\x10\xa1\x9d\xb1\xfb\x19\xfb\
|
||||
\x1a\xff\x00\xc1\xa7\xbf\x0b\xff\x00\x67\x76\xf8\x5b\xe2\x6f\x12\
|
||||
\x78\xa6\xfb\xc4\x9f\x10\x3c\x17\xe2\x2b\x1f\x12\xeb\x13\x0b\x48\
|
||||
\xdb\x4b\xd4\xa4\xb7\xf3\x9c\xda\x45\x11\x0a\x52\x26\x9e\x48\x1c\
|
||||
\xbb\xef\x62\x2d\x55\x40\x50\xc6\xbe\xc9\xff\x00\x82\x61\x7c\x4f\
|
||||
\xf0\xf7\xc6\xef\x87\xfe\x2e\xf1\x35\xc7\x85\x2c\xbc\x23\xf1\x9a\
|
||||
\x2d\x72\x4d\x13\xe2\x9d\x87\x98\xd3\xdd\x5b\xeb\x76\x8a\xa8\xca\
|
||||
\x24\x72\x5d\xad\x1a\x32\x92\xdb\x00\x76\x08\x66\x5d\xa0\x12\xd5\
|
||||
\xf4\xed\x00\x78\x3e\xb3\xff\x00\x04\xe5\xf8\x6b\xab\xfe\xdf\x9a\
|
||||
\x37\xed\x28\xb6\xba\xad\x8f\xc4\xdd\x23\x44\x97\x40\x79\xad\x6e\
|
||||
\xfc\xbb\x3d\x4a\xd9\xd1\x90\x1b\x88\xb6\x9f\x31\xd1\x5b\x0a\x77\
|
||||
\x0c\x6d\x5c\x83\xb5\x71\xe9\x5f\x18\x3e\x3e\xf8\x17\xf6\x7b\xd0\
|
||||
\x23\xd5\x7c\x7b\xe3\x2f\x0a\xf8\x2b\x4c\x99\x8a\x47\x75\xae\xea\
|
||||
\xb0\x69\xf0\xca\xc3\xaa\xab\x4a\xca\x18\xf2\x38\x1c\xf3\x5a\x9f\
|
||||
\x11\xfc\x7d\xa6\xfc\x2a\xf8\x7b\xaf\x78\xa3\x5a\x9b\xec\xda\x3f\
|
||||
\x86\xf4\xeb\x8d\x52\xfa\x6c\x7f\xaa\x82\x08\xda\x59\x1b\xf0\x55\
|
||||
\x26\xbf\x89\xdf\xf8\x29\x5f\xfc\x14\x4b\xc7\x1f\xf0\x53\x0f\xda\
|
||||
\xab\xc4\x1f\x12\x3c\x65\x7d\x70\xd6\xf7\x53\xc9\x06\x87\xa4\x97\
|
||||
\xdd\x6d\xa0\xe9\xe1\x8f\x95\x6d\x12\xf4\x18\x5c\x17\x61\xcb\xb9\
|
||||
\x66\x3c\x9a\x00\xfe\xd7\x7e\x19\xfc\x56\xf0\xbf\xc6\x8f\x09\x41\
|
||||
\xaf\xf8\x3f\xc4\x9a\x0f\x8a\xb4\x3b\xa2\x56\x1d\x47\x47\xbf\x8a\
|
||||
\xfa\xd6\x52\x3a\x81\x24\x4c\xca\x48\xc8\xc8\xcf\x14\x57\xf3\xa9\
|
||||
\xff\x00\x06\x4f\x6a\x1f\x10\x8f\xed\x77\xf1\x52\xd7\x4f\x93\x52\
|
||||
\x6f\x85\xeb\xe1\x75\x97\x5a\x8c\xbb\x7d\x8a\x3d\x50\xdc\xc4\x2c\
|
||||
\xdb\x1d\x3c\xe3\x12\xdd\x80\x47\x25\x03\x67\xa0\xa2\x80\x3f\xa4\
|
||||
\xaa\x28\xa2\x80\x0a\xf9\x17\xf6\x9f\xf8\xa7\xe1\xbf\x10\xff\x00\
|
||||
\xc1\x43\x3c\x2d\xf0\xb7\xe2\x86\xa9\xa4\x69\x7f\x0d\x57\xc0\x97\
|
||||
\x3e\x30\xb5\xb3\xd5\xae\x52\xdb\x4e\xf1\x1e\xa5\x15\xfa\x41\x24\
|
||||
\x57\x0d\x23\x04\x99\x6d\xa1\x64\x94\x40\xd9\x52\x67\xde\xc0\xf9\
|
||||
\x63\x05\x14\x00\xdf\xf8\x26\x86\xa5\xe0\xbd\x33\xf6\x80\xfd\xa7\
|
||||
\xbc\x3b\xe0\xfd\x4a\xc6\xf2\x2b\x7f\x1a\xd8\xeb\xad\x0e\x8c\x22\
|
||||
\x1a\x1d\xad\xbd\xf6\x93\x68\xd6\xe2\xd8\x44\x4a\x09\x58\x43\x23\
|
||||
\x4d\x8c\x16\x76\x57\x20\x6f\x15\xf5\xe5\x14\x50\x07\x01\xfb\x55\
|
||||
\xfc\x6d\x87\xf6\x6c\xfd\x9a\x3c\x7b\xf1\x02\x68\x5a\xe2\x3f\x06\
|
||||
\xe8\x37\x9a\xbf\x94\xab\x9f\x30\xc3\x0b\x3a\x83\xe8\x09\x03\x27\
|
||||
\xb0\xc9\xed\x5f\x9b\xdf\x1d\xbf\xe0\x84\xbf\x0f\xfc\x4d\xff\x00\
|
||||
\x04\xbf\xd6\x3c\x59\xe2\x9b\x7d\x3f\xe2\x07\xed\x01\x6f\xa3\x47\
|
||||
\xe3\xad\x53\xc6\x5a\x8e\xa9\x7b\xab\x41\xe2\x0d\x4e\xda\x3f\xb5\
|
||||
\xc9\x07\xcd\x27\x36\x13\x05\x78\x84\x51\x85\x5d\x8e\xa4\x0c\xa8\
|
||||
\x34\x51\x40\x1b\x9f\x02\x3f\xe0\xe5\x6f\x80\x7a\x4e\x81\xa3\xea\
|
||||
\xfe\x32\xb0\xf1\x47\xc1\x4f\x86\x3a\x96\x83\x6c\xbe\x0b\x8f\x50\
|
||||
\xf0\x7d\xda\xda\xeb\x8d\x11\xf2\xee\xda\xd6\x5b\x68\xde\x2f\x26\
|
||||
\xde\x41\xe4\x22\x2e\x09\x11\xbb\x1c\x02\x82\xba\xdf\x8d\xbf\xf0\
|
||||
\x75\x2f\xec\x65\xf0\x93\xc1\xd2\xea\x3a\x5f\xc4\x4d\x4b\xc7\x9a\
|
||||
\x87\x94\x64\x83\x4a\xd0\x74\x2b\xc3\x71\x33\x63\x85\x2f\x71\x1c\
|
||||
\x51\x26\x4f\xf7\x9c\x63\xde\x8a\x28\x03\xe1\xaf\xf8\x24\xb7\xfc\
|
||||
\x15\x03\xe2\xe7\xc6\x5f\xf8\x29\x27\x8c\x7f\x6a\x4f\x14\x78\x6d\
|
||||
\x7c\x33\xf0\x07\xe3\x77\x8b\x34\xdf\x85\xd7\x51\x22\x15\x83\x4e\
|
||||
\xbc\x30\xc8\x34\x99\xcc\x98\x02\x67\x89\x92\x3b\x79\xa6\x38\x1b\
|
||||
\xaf\xd4\x60\x00\xaa\xbf\xbf\x94\x51\x40\x1f\x2f\x7f\xc1\x6b\xf5\
|
||||
\x2b\xcd\x27\xfe\x09\x23\xfb\x45\x4d\x63\xe6\x0b\x81\xe0\x3d\x51\
|
||||
\x33\x1f\xde\x08\xd0\x32\xb9\xfc\x10\xb7\xe1\x5f\xc5\x34\x60\x06\
|
||||
\x56\x65\x2c\x99\x19\xf7\xa2\x8a\x00\xfe\xc0\xff\x00\xe0\xda\x2f\
|
||||
\xd9\x7f\x4e\xfd\x99\xff\x00\xe0\x8f\xdf\x0b\x64\x87\x4f\x8a\xd3\
|
||||
\x59\xf1\xfd\xb4\x9e\x2e\xd5\xe7\x09\x89\x2e\xe4\xbb\x72\xd0\x33\
|
||||
\x1e\xa7\x6d\xa8\xb7\x41\xec\xbe\xe6\x8a\x28\xa0\x0f\xff\xd9\
|
||||
"
|
||||
|
||||
qt_resource_name = b"\
|
||||
\x00\x09\
|
||||
\x05\x91\xe8\x14\
|
||||
\x00\x52\
|
||||
\x00\x45\x00\x41\x00\x44\x00\x4d\x00\x45\x00\x2e\x00\x6d\x00\x64\
|
||||
\x00\x06\
|
||||
\x07\x03\x7d\xc3\
|
||||
\x00\x69\
|
||||
\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
|
||||
\x00\x08\
|
||||
\x0b\x77\x5c\xa7\
|
||||
\x00\x68\
|
||||
\x00\x65\x00\x61\x00\x64\x00\x2e\x00\x6a\x00\x70\x00\x67\
|
||||
"
|
||||
|
||||
qt_resource_struct_v1 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x18\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x04\x12\
|
||||
"
|
||||
|
||||
qt_resource_struct_v2 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x01\x63\x19\x74\xf8\x4b\
|
||||
\x00\x00\x00\x18\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x04\x12\
|
||||
\x00\x00\x01\x60\x83\x46\x10\xc7\
|
||||
"
|
||||
|
||||
qt_version = QtCore.qVersion().split('.')
|
||||
if qt_version < ['5', '8', '0']:
|
||||
rcc_version = 1
|
||||
qt_resource_struct = qt_resource_struct_v1
|
||||
else:
|
||||
rcc_version = 2
|
||||
qt_resource_struct = qt_resource_struct_v2
|
||||
|
||||
def qInitResources():
|
||||
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
def qCleanupResources():
|
||||
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
qInitResources()
|
48
QRC资源文件使用/textread.py
Normal file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from PyQt5.QtCore import QFile, QIODevice, QTextStream, QTextCodec
|
||||
from PyQt5.QtWidgets import QTextBrowser
|
||||
|
||||
import res_rc # @UnresolvedImport @UnusedImport
|
||||
|
||||
|
||||
# Created on 2018年5月1日
|
||||
# author: Irony
|
||||
# site: https://github.com/892768447
|
||||
# email: 892768447@qq.com
|
||||
# file: QRC资源文件使用.textread
|
||||
# description:
|
||||
__Author__ = """By: Irony
|
||||
QQ: 892768447
|
||||
Email: 892768447@qq.com"""
|
||||
__Copyright__ = 'Copyright (c) 2018 Irony'
|
||||
__Version__ = 1.0
|
||||
|
||||
|
||||
class TextBrowser(QTextBrowser):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TextBrowser, self).__init__(*args, **kwargs)
|
||||
self.setText(self.readText(':/README.md'))
|
||||
|
||||
def readText(self, path):
|
||||
file = QFile(path)
|
||||
if not file.open(QIODevice.ReadOnly):
|
||||
return ''
|
||||
stream = QTextStream(file)
|
||||
# 下面这句设置编码根据文件的编码自行确定
|
||||
stream.setCodec(QTextCodec.codecForName('UTF-8'))
|
||||
data = stream.readAll()
|
||||
file.close()
|
||||
del stream
|
||||
return data
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
app = QApplication(sys.argv)
|
||||
app.aboutToQuit.connect(res_rc.qCleanupResources) # 退出时要清理资源
|
||||
w = TextBrowser()
|
||||
w.show()
|
||||
sys.exit(app.exec_())
|
BIN
QRC资源文件使用/tools/rcc.exe
Normal file
12
README.md
|
@ -32,6 +32,16 @@
|
|||
- [1.22 Json生成QTreeWidget](Json生成QTreeWidget/)
|
||||
- [1.23 嵌入外部窗口](嵌入外部窗口/)
|
||||
- [1.24 必应壁纸](https://github.com/892768447/BingWallpaper)
|
||||
- [1.25 网络操作](网络操作/)
|
||||
- [1.26 无边框自定义标题栏窗口](无边框自定义标题栏窗口/)
|
||||
- [1.27 QRC资源文件使用](QRC资源文件使用/)
|
||||
- [1.28 C和C++扩展](C和C++扩展/)
|
||||
- [1.28.1 pyx和c++](C和C++扩展/pyx和c++/)
|
||||
- [1.28.2 py转pyd](C和C++扩展/py转pyd/)
|
||||
- [1.28.3 pydext](C和C++扩展/pydext/)
|
||||
- [1.29 数据库查询显示表格](数据库查询显示表格/)
|
||||
- [1.30 左侧选项卡](左侧选项卡/)
|
||||
- [1.40 探测窗口和放大截图](探测窗口和放大截图/)
|
||||
|
||||
|
||||
### [2.QGraphicsView练习](QGraphicsView练习/)
|
||||
|
@ -53,7 +63,7 @@
|
|||
- [4.7 QPushButton进度动画](界面美化/QPushButton进度动画)
|
||||
- [4.8 折叠动画效果](partner_625781186/2.折叠控件/)
|
||||
- [4.9 水波纹进度条](界面美化/水波纹进度条)
|
||||
|
||||
- [4.10 QSlider美化](界面美化/QSlider美化)
|
||||
|
||||
### [5.QML](partner_625781186/QML_QtQuick_PY)
|
||||
- [python_QML调用基础](partner_625781186/QML_QtQuick_PY/python_QML调用基础)
|
||||
|
|
BIN
人脸描点检测/dist/dlib-19.4.0.win32-py2.7.exe
vendored
BIN
人脸描点检测/dist/dlib-19.4.0.win32-py3.4.exe
vendored
|
@ -11,7 +11,9 @@ Created on 2017年12月11日
|
|||
'''
|
||||
import sys
|
||||
|
||||
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QTextBrowser, QPushButton
|
||||
from PyQt5.QtCore import pyqtSignal, Qt
|
||||
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QTextBrowser, QPushButton,\
|
||||
QMessageBox
|
||||
import keyboard
|
||||
|
||||
|
||||
|
@ -22,9 +24,12 @@ __Version__ = "Version 1.0"
|
|||
|
||||
class Window(QWidget):
|
||||
|
||||
dialogShow = pyqtSignal()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Window, self).__init__(*args, **kwargs)
|
||||
layout = QVBoxLayout(self)
|
||||
self.dialogShow.connect(self.onShowDialog, type=Qt.QueuedConnection)
|
||||
self.logView = QTextBrowser(self)
|
||||
self.logView.append("点击右上角关闭按钮会隐藏窗口,通过热键Alt+S来显示")
|
||||
self.logView.append("等待热键中")
|
||||
|
@ -53,6 +58,10 @@ class Window(QWidget):
|
|||
self.logView.append('按下alt+s')
|
||||
self.show()
|
||||
self.showNormal()
|
||||
self.dialogShow.emit()
|
||||
|
||||
def onShowDialog(self):
|
||||
QMessageBox.information(self, '对话框', '按下alt+s键')
|
||||
|
||||
def onHide(self):
|
||||
"""隐藏"""
|
||||
|
|
|
@ -4,5 +4,20 @@ pip install keyboard
|
|||
|
||||
https://github.com/892768447/keyboard
|
||||
|
||||
* keyboard
|
||||
* 该模块使用全局低级钩子的方式hook键盘来处理,对系统有一定的影响
|
||||
* 有反映说弹出对话框假死,这里粗略解决下使用信号槽的方式来弹出对话框
|
||||
* 该模块里使用了每次产生一个子线程来回调函数
|
||||
```
|
||||
def call_later(fn, args=(), delay=0.001):
|
||||
"""
|
||||
Calls the provided function in a new thread after waiting some time.
|
||||
Useful for giving the system some time to process an event, without blocking
|
||||
the current execution flow.
|
||||
"""
|
||||
thread = _Thread(target=lambda: (_time.sleep(delay), fn(*args)))
|
||||
thread.start()
|
||||
```
|
||||
|
||||
# 截图
|
||||
![截图](ScreenShot/1.gif)
|
18
基础教程/1、Qt设计师/1、初识设计师.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
# 认识设计师
|
||||
|
||||
* 1、启动对话框(常用的QDialog,QMainWindow, QWidget)见①
|
||||
* Dialog with Buttons Bottom(在下方有两个按钮的对话框)
|
||||
* Dialog with Buttons Right(在右边有两个按钮的对话框)
|
||||
* Dialog without Buttons(不带按钮的对话框)
|
||||
* Main Window(标准的主界面窗口,带有菜单栏,状态栏,浮动窗口等等)
|
||||
* Widget(所有控件的基类,一般用于当作容器)
|
||||
|
||||
![Colors.png](ScreenShot/初识设计师1.png)
|
||||
|
||||
* 2、设计师界面分布(见②③④⑤)
|
||||
* 左侧②是常用控件区域,拖动放到中间
|
||||
* ③是当前的控件对象
|
||||
* ④当前控件的属性设置(比如设置大小、文字之类的)
|
||||
* ⑤该区域为信号槽设计、图片等文件资源设计、动作设计器(后面在详细讲)
|
||||
|
||||
![Colors.png](ScreenShot/初识设计师2.png)
|
BIN
基础教程/1、Qt设计师/ScreenShot/初识设计师1.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
基础教程/1、Qt设计师/ScreenShot/初识设计师2.png
Normal file
After Width: | Height: | Size: 105 KiB |
110
左侧选项卡/LeftTabWidget.py
Normal file
|
@ -0,0 +1,110 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from random import randint
|
||||
|
||||
from PyQt5.QtCore import Qt, QSize
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QWidget, QListWidget, QStackedWidget, QHBoxLayout,\
|
||||
QListWidgetItem, QLabel
|
||||
|
||||
|
||||
# Created on 2018年5月29日
|
||||
# author: Irony
|
||||
# site: https://github.com/892768447
|
||||
# email: 892768447@qq.com
|
||||
# file: LeftTabWidget
|
||||
# description:
|
||||
__Author__ = """By: Irony
|
||||
QQ: 892768447
|
||||
Email: 892768447@qq.com"""
|
||||
__Copyright__ = 'Copyright (c) 2018 Irony'
|
||||
__Version__ = 1.0
|
||||
|
||||
|
||||
class LeftTabWidget(QWidget):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(LeftTabWidget, self).__init__(*args, **kwargs)
|
||||
self.resize(800, 600)
|
||||
#左右布局(左边一个QListWidget + 右边QStackedWidget)
|
||||
layout = QHBoxLayout(self, spacing=0)
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
# 左侧列表
|
||||
self.listWidget = QListWidget(self)
|
||||
layout.addWidget(self.listWidget)
|
||||
# 右侧层叠窗口
|
||||
self.stackedWidget = QStackedWidget(self)
|
||||
layout.addWidget(self.stackedWidget)
|
||||
self.initUi()
|
||||
|
||||
def initUi(self):
|
||||
# 初始化界面
|
||||
# 通过QListWidget的当前item变化来切换QStackedWidget中的序号
|
||||
self.listWidget.currentRowChanged.connect(
|
||||
self.stackedWidget.setCurrentIndex)
|
||||
# 去掉边框
|
||||
self.listWidget.setFrameShape(QListWidget.NoFrame)
|
||||
# 隐藏滚动条
|
||||
self.listWidget.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
self.listWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
# 这里就用一般的文本配合图标模式了(也可以直接用Icon模式,setViewMode)
|
||||
for i in range(20):
|
||||
item = QListWidgetItem(
|
||||
QIcon('images/0%d.ico' % randint(1, 8)), str('选 项 %s' % i), self.listWidget)
|
||||
# 设置item的默认宽高(这里只有高度比较有用)
|
||||
item.setSizeHint(QSize(16777215, 60))
|
||||
# 文字居中
|
||||
item.setTextAlignment(Qt.AlignCenter)
|
||||
|
||||
# 再模拟20个右侧的页面(就不和上面一起循环放了)
|
||||
for i in range(20):
|
||||
label = QLabel('我是页面 %d' % i, self)
|
||||
label.setAlignment(Qt.AlignCenter)
|
||||
# 设置label的背景颜色(这里随机)
|
||||
# 这里加了一个margin边距(方便区分QStackedWidget和QLabel的颜色)
|
||||
label.setStyleSheet('background: rgb(%d, %d, %d);margin: 50px;' % (
|
||||
randint(0, 255), randint(0, 255), randint(0, 255)))
|
||||
self.stackedWidget.addWidget(label)
|
||||
|
||||
|
||||
# 美化样式表
|
||||
Stylesheet = """
|
||||
/*去掉item虚线边框*/
|
||||
QListWidget, QListView, QTreeWidget, QTreeView {
|
||||
outline: 0px;
|
||||
}
|
||||
/*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/
|
||||
QListWidget {
|
||||
min-width: 120px;
|
||||
max-width: 120px;
|
||||
color: white;
|
||||
background: black;
|
||||
}
|
||||
/*被选中时的背景颜色和左边框颜色*/
|
||||
QListWidget::item:selected {
|
||||
background: rgb(52, 52, 52);
|
||||
border-left: 2px solid rgb(9, 187, 7);
|
||||
}
|
||||
/*鼠标悬停颜色*/
|
||||
HistoryPanel::item:hover {
|
||||
background: rgb(52, 52, 52);
|
||||
}
|
||||
|
||||
/*右侧的层叠窗口的背景颜色*/
|
||||
QStackedWidget {
|
||||
background: rgb(30, 30, 30);
|
||||
}
|
||||
/*模拟的页面*/
|
||||
QLabel {
|
||||
color: white;
|
||||
}
|
||||
"""
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
app = QApplication(sys.argv)
|
||||
app.setStyleSheet(Stylesheet)
|
||||
w = LeftTabWidget()
|
||||
w.show()
|
||||
sys.exit(app.exec_())
|
10
左侧选项卡/README.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# 选项卡
|
||||
|
||||
### [Python3.4.4 or Python3.5][PyQt5]
|
||||
|
||||
### 1.方式一使用 (左边一个QListWidget + 右边QStackedWidget)
|
||||
|
||||
详细注释在代码中
|
||||
|
||||
# 截图
|
||||
![截图](ScreenShot/1.gif)
|
BIN
左侧选项卡/ScreenShot/1.gif
Normal file
After Width: | Height: | Size: 201 KiB |
BIN
左侧选项卡/images/01.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
左侧选项卡/images/02.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
左侧选项卡/images/03.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
左侧选项卡/images/04.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
左侧选项卡/images/05.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
左侧选项卡/images/06.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
左侧选项卡/images/07.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
左侧选项卡/images/08.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
7
探测窗口和放大截图/README.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
# 简单探测窗口和放大截图
|
||||
|
||||
利用win32gui模块获取鼠标所在位置的窗口大小(未去掉边框)和rgb颜色, 主要思路是利用一个全屏的全透明鼠标穿透的窗口(目的在于绘制矩形框和截图)
|
||||
|
||||
截图
|
||||
|
||||
![1](ScreenShot/1.gif)
|
BIN
探测窗口和放大截图/ScreenShot/1.gif
Normal file
After Width: | Height: | Size: 1.3 MiB |
120
探测窗口和放大截图/简单探测窗口和放大截图.py
Normal file
|
@ -0,0 +1,120 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from PyQt5.QtCore import Qt, QRect
|
||||
from PyQt5.QtGui import QPainter, QPen, QCursor, QColor
|
||||
from PyQt5.QtWidgets import QLabel, QWidget, QApplication
|
||||
import win32gui
|
||||
|
||||
|
||||
# Created on 2018年6月8日
|
||||
# author: Irony
|
||||
# site: https://github.com/892768447
|
||||
# email: 892768447@qq.com
|
||||
# file: 简单探测窗口和放大截图
|
||||
# description:
|
||||
__Author__ = """By: Irony
|
||||
QQ: 892768447
|
||||
Email: 892768447@qq.com"""
|
||||
__Copyright__ = 'Copyright (c) 2018 Irony'
|
||||
__Version__ = 1.0
|
||||
|
||||
|
||||
class FrameWidget(QWidget):
|
||||
# 一个全屏的透明窗口
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(FrameWidget, self).__init__(*args, **kwargs)
|
||||
self.setWindowFlags(Qt.Tool | Qt.FramelessWindowHint |
|
||||
Qt.WindowStaysOnTopHint)
|
||||
self.setAttribute(Qt.WA_TranslucentBackground, True)
|
||||
self.showFullScreen() # 全屏
|
||||
self._rect = QRect() # 被探测的窗口的矩形位置
|
||||
|
||||
def setRect(self, x, y, w, h):
|
||||
# 更新矩形框
|
||||
self._rect.setX(x)
|
||||
self._rect.setY(y)
|
||||
self._rect.setWidth(w - x)
|
||||
self._rect.setHeight(h - y)
|
||||
self.update()
|
||||
|
||||
def paintEvent(self, event):
|
||||
super(FrameWidget, self).paintEvent(event)
|
||||
if self._rect.isValid(): # 画边框
|
||||
painter = QPainter(self)
|
||||
painter.setPen(QPen(Qt.red, 4))
|
||||
painter.drawRect(self._rect)
|
||||
|
||||
|
||||
class Label(QLabel):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Label, self).__init__(*args, **kwargs)
|
||||
self.ismd = False # 是不是否按下
|
||||
self.setAlignment(Qt.AlignCenter)
|
||||
self.setText('鼠标按住不放拖动到外面')
|
||||
self.resize(240, 240)
|
||||
self.frameWidget = FrameWidget() # 边框
|
||||
|
||||
def closeEvent(self, event):
|
||||
self.frameWidget.close()
|
||||
super(Label, self).closeEvent(event)
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
super(Label, self).mousePressEvent(event)
|
||||
self.ismd = True # 按下
|
||||
# 设置鼠标样式为十字
|
||||
self.setCursor(Qt.CrossCursor)
|
||||
|
||||
def mouseReleaseEvent(self, event):
|
||||
super(Label, self).mouseReleaseEvent(event)
|
||||
self.ismd = False
|
||||
self.frameWidget.setRect(0, 0, 0, 0)
|
||||
# 设置鼠标样式为普通
|
||||
self.setCursor(Qt.ArrowCursor)
|
||||
self.clear()
|
||||
self.setText('鼠标按住不放拖动到外面')
|
||||
|
||||
def mouseMoveEvent(self, event):
|
||||
super(Label, self).mouseMoveEvent(event)
|
||||
# 得到鼠标在屏幕中的位置
|
||||
pos = self.mapToGlobal(event.pos())
|
||||
hwnd = win32gui.WindowFromPoint((pos.x(), pos.y()))
|
||||
self.frameWidget.setRect(*win32gui.GetWindowRect(hwnd))
|
||||
# 截图
|
||||
screen = QApplication.primaryScreen()
|
||||
if screen is not None:
|
||||
image = screen.grabWindow(0,
|
||||
pos.x() - 60, pos.y() - 60, 120, 120)
|
||||
if not image.isNull():
|
||||
self.setPixmap(image.scaled(240, 240))
|
||||
|
||||
def paintEvent(self, event):
|
||||
super(Label, self).paintEvent(event)
|
||||
# 中正间画十字
|
||||
painter = QPainter(self)
|
||||
painter.setPen(Qt.red)
|
||||
x = int(self.width() / 2)
|
||||
y = int(self.height() / 2)
|
||||
painter.drawLine(x, 0, x, self.height())
|
||||
painter.drawLine(0, y, self.width(), y)
|
||||
if self.ismd:
|
||||
# 画坐标点
|
||||
pos = QCursor.pos()
|
||||
ret = win32gui.GetPixel(win32gui.GetWindowDC(
|
||||
win32gui.GetDesktopWindow()), pos.x(), pos.y())
|
||||
r, g, b = ret & 0xff, (ret >> 8) & 0xff, (ret >> 16) & 0xff
|
||||
print(r, g, b)
|
||||
painter.setPen(Qt.white)
|
||||
painter.drawText(self.rect(), Qt.AlignLeft |
|
||||
Qt.AlignBottom, '({}, {})\nRGB: ({}, {}, {})\n{}'.format(
|
||||
pos.x(), pos.y(), r, g, b, QColor(r, g, b).name()))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
app = QApplication(sys.argv)
|
||||
app.setQuitOnLastWindowClosed(True)
|
||||
w = Label()
|
||||
w.show()
|
||||
sys.exit(app.exec_())
|
5
数据库查询显示表格/README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# sqlalchemy动态拼接字段查询结果
|
||||
|
||||
截图
|
||||
|
||||
![1](ScreenShot/1.png)
|
BIN
数据库查询显示表格/ScreenShot/1.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
数据库查询显示表格/data.sqlite3
Normal file
149
数据库查询显示表格/main.py
Normal file
|
@ -0,0 +1,149 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Created on 2018年5月15日
|
||||
@author: Irony
|
||||
@site: https://github.com/892768447
|
||||
@email: 892768447@qq.com
|
||||
@file: 数据库查询显示表格.main
|
||||
@description:
|
||||
"""
|
||||
from PyQt5.QtCore import pyqtSlot
|
||||
from PyQt5.QtWidgets import QWidget, QMessageBox, QTableWidgetItem
|
||||
from sqlalchemy.engine import create_engine
|
||||
from sqlalchemy.ext.declarative.api import declarative_base
|
||||
from sqlalchemy.orm.session import sessionmaker
|
||||
from sqlalchemy.sql.expression import and_
|
||||
from sqlalchemy.sql.schema import Column
|
||||
from sqlalchemy.sql.sqltypes import Integer, Text
|
||||
from 数据库查询显示表格.mainui import Ui_Form
|
||||
|
||||
__Author__ = """By: Irony
|
||||
QQ: 892768447
|
||||
Email: 892768447@qq.com"""
|
||||
__Copyright__ = "Copyright (c) 2018 Irony"
|
||||
__Version__ = "Version 1.0"
|
||||
|
||||
# engine = create_engine('mysql+mysqldb://root@localhost:3306/tourist?charset=utf8')
|
||||
engine = create_engine('sqlite:///data.sqlite3', echo=True) # echo 表示开启命令显示
|
||||
Base = declarative_base()
|
||||
|
||||
|
||||
class Tourist(Base):
|
||||
|
||||
__tablename__ = 'tourist'
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(Text)
|
||||
license = Column(Text)
|
||||
flightnumber = Column(Text)
|
||||
flightdate = Column(Text)
|
||||
seatnumber = Column(Text)
|
||||
boardingport = Column(Text)
|
||||
no = Column(Text)
|
||||
departurestation = Column(Text)
|
||||
destinationstation = Column(Text)
|
||||
|
||||
|
||||
class Window(QWidget, Ui_Form):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Window, self).__init__(*args, **kwargs)
|
||||
self.setupUi(self)
|
||||
# sql的拼接字段
|
||||
self.sql = {}
|
||||
# 数据库连接
|
||||
self.session = sessionmaker(bind=engine)()
|
||||
|
||||
@pyqtSlot()
|
||||
def on_pushButtonQuery_clicked(self):
|
||||
"""查询按钮"""
|
||||
self.applyName()
|
||||
self.applySeat()
|
||||
self.applyLicense()
|
||||
self.applyPort()
|
||||
if not self.sql:
|
||||
return QMessageBox.warning(self, '提示', '没有进行任何输入')
|
||||
# 清空数据
|
||||
self.tableWidget.clear()
|
||||
# 重新设置表头
|
||||
self.tableWidget.setHorizontalHeaderLabels(
|
||||
['编号', '姓名', '证件号', '航班号', '航班日期', '座位号', '登机口', '序号', '出发地', '目的地'])
|
||||
# 根据选择的字段进行并列查询
|
||||
rets = self.session.query(Tourist).filter(
|
||||
and_(*(key == value for key, value in self.sql.items()))).all()
|
||||
if not rets:
|
||||
return QMessageBox.information(self, '提示', '未查询到结果')
|
||||
self.tableWidget.setRowCount(len(rets))
|
||||
# 根据查询结果添加到表格中
|
||||
for row, tourist in enumerate(rets):
|
||||
self.tableWidget.setItem(row, 0, QTableWidgetItem(str(tourist.id)))
|
||||
self.tableWidget.setItem(
|
||||
row, 1, QTableWidgetItem(str(tourist.name)))
|
||||
self.tableWidget.setItem(
|
||||
row, 2, QTableWidgetItem(str(tourist.license)))
|
||||
self.tableWidget.setItem(
|
||||
row, 3, QTableWidgetItem(str(tourist.flightnumber)))
|
||||
self.tableWidget.setItem(
|
||||
row, 4, QTableWidgetItem(str(tourist.flightdate)))
|
||||
self.tableWidget.setItem(
|
||||
row, 5, QTableWidgetItem(str(tourist.seatnumber)))
|
||||
self.tableWidget.setItem(
|
||||
row, 6, QTableWidgetItem(str(tourist.boardingport)))
|
||||
self.tableWidget.setItem(row, 7, QTableWidgetItem(str(tourist.no)))
|
||||
self.tableWidget.setItem(
|
||||
row, 8, QTableWidgetItem(str(tourist.departurestation)))
|
||||
self.tableWidget.setItem(
|
||||
row, 9, QTableWidgetItem(str(tourist.destinationstation)))
|
||||
|
||||
def applyName(self):
|
||||
"""姓名"""
|
||||
if not self.checkBoxName.isChecked():
|
||||
if Tourist.name in self.sql:
|
||||
# 移除
|
||||
self.sql.pop(Tourist.name)
|
||||
# 更新或添加到字典里
|
||||
else:
|
||||
self.sql[Tourist.name] = self.lineEditName.text().strip()
|
||||
|
||||
def applySeat(self):
|
||||
"""座位号"""
|
||||
if not self.checkBoxSeat.isChecked():
|
||||
if Tourist.seatnumber in self.sql:
|
||||
# 移除
|
||||
self.sql.pop(Tourist.seatnumber)
|
||||
# 更新或添加到字典里
|
||||
else:
|
||||
self.sql[Tourist.seatnumber] = self.lineEditSeat.text().strip()
|
||||
|
||||
def applyLicense(self):
|
||||
"""证件号"""
|
||||
if not self.checkBoxLicense.isChecked():
|
||||
if Tourist.license in self.sql:
|
||||
# 移除
|
||||
self.sql.pop(Tourist.license)
|
||||
# 更新或添加到字典里
|
||||
else:
|
||||
self.sql[Tourist.license] = self.lineEditLicense.text().strip()
|
||||
|
||||
def applyPort(self):
|
||||
"""登机口"""
|
||||
if not self.checkBoxPort.isChecked():
|
||||
if Tourist.boardingport in self.sql:
|
||||
# 移除
|
||||
self.sql.pop(Tourist.boardingport)
|
||||
# 更新或添加到字典里
|
||||
else:
|
||||
self.sql[Tourist.boardingport] = self.lineEditPort.text().strip()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
import cgitb
|
||||
sys.excepthook = cgitb.Hook(1, None, 5, sys.stderr, 'text')
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
app = QApplication(sys.argv)
|
||||
w = Window()
|
||||
w.show()
|
||||
sys.exit(app.exec_())
|
111
数据库查询显示表格/mainui.py
Normal file
|
@ -0,0 +1,111 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'mainui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.5.1
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
class Ui_Form(object):
|
||||
def setupUi(self, Form):
|
||||
Form.setObjectName("Form")
|
||||
Form.resize(400, 362)
|
||||
self.gridLayout = QtWidgets.QGridLayout(Form)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.checkBoxName = QtWidgets.QCheckBox(Form)
|
||||
self.checkBoxName.setObjectName("checkBoxName")
|
||||
self.gridLayout.addWidget(self.checkBoxName, 0, 0, 1, 1)
|
||||
self.checkBoxSeat = QtWidgets.QCheckBox(Form)
|
||||
self.checkBoxSeat.setObjectName("checkBoxSeat")
|
||||
self.gridLayout.addWidget(self.checkBoxSeat, 0, 2, 1, 1)
|
||||
self.lineEditName = QtWidgets.QLineEdit(Form)
|
||||
self.lineEditName.setObjectName("lineEditName")
|
||||
self.gridLayout.addWidget(self.lineEditName, 0, 1, 1, 1)
|
||||
self.tableWidget = QtWidgets.QTableWidget(Form)
|
||||
self.tableWidget.setObjectName("tableWidget")
|
||||
self.tableWidget.setColumnCount(10)
|
||||
self.tableWidget.setRowCount(0)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(0, item)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(1, item)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(2, item)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(3, item)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(4, item)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(5, item)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(6, item)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(7, item)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(8, item)
|
||||
item = QtWidgets.QTableWidgetItem()
|
||||
self.tableWidget.setHorizontalHeaderItem(9, item)
|
||||
self.gridLayout.addWidget(self.tableWidget, 3, 0, 1, 4)
|
||||
self.lineEditSeat = QtWidgets.QLineEdit(Form)
|
||||
self.lineEditSeat.setObjectName("lineEditSeat")
|
||||
self.gridLayout.addWidget(self.lineEditSeat, 0, 3, 1, 1)
|
||||
self.lineEditPort = QtWidgets.QLineEdit(Form)
|
||||
self.lineEditPort.setObjectName("lineEditPort")
|
||||
self.gridLayout.addWidget(self.lineEditPort, 1, 3, 1, 1)
|
||||
self.checkBoxPort = QtWidgets.QCheckBox(Form)
|
||||
self.checkBoxPort.setObjectName("checkBoxPort")
|
||||
self.gridLayout.addWidget(self.checkBoxPort, 1, 2, 1, 1)
|
||||
self.checkBoxLicense = QtWidgets.QCheckBox(Form)
|
||||
self.checkBoxLicense.setObjectName("checkBoxLicense")
|
||||
self.gridLayout.addWidget(self.checkBoxLicense, 1, 0, 1, 1)
|
||||
self.lineEditLicense = QtWidgets.QLineEdit(Form)
|
||||
self.lineEditLicense.setObjectName("lineEditLicense")
|
||||
self.gridLayout.addWidget(self.lineEditLicense, 1, 1, 1, 1)
|
||||
self.pushButtonQuery = QtWidgets.QPushButton(Form)
|
||||
self.pushButtonQuery.setObjectName("pushButtonQuery")
|
||||
self.gridLayout.addWidget(self.pushButtonQuery, 2, 0, 1, 4)
|
||||
|
||||
self.retranslateUi(Form)
|
||||
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||
|
||||
def retranslateUi(self, Form):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
Form.setWindowTitle(_translate("Form", "Form"))
|
||||
self.checkBoxName.setText(_translate("Form", "姓名"))
|
||||
self.checkBoxSeat.setText(_translate("Form", "座位号"))
|
||||
item = self.tableWidget.horizontalHeaderItem(0)
|
||||
item.setText(_translate("Form", "编号"))
|
||||
item = self.tableWidget.horizontalHeaderItem(1)
|
||||
item.setText(_translate("Form", "姓名"))
|
||||
item = self.tableWidget.horizontalHeaderItem(2)
|
||||
item.setText(_translate("Form", "证件号"))
|
||||
item = self.tableWidget.horizontalHeaderItem(3)
|
||||
item.setText(_translate("Form", "航班号"))
|
||||
item = self.tableWidget.horizontalHeaderItem(4)
|
||||
item.setText(_translate("Form", "航班日期"))
|
||||
item = self.tableWidget.horizontalHeaderItem(5)
|
||||
item.setText(_translate("Form", "座位号"))
|
||||
item = self.tableWidget.horizontalHeaderItem(6)
|
||||
item.setText(_translate("Form", "登机口"))
|
||||
item = self.tableWidget.horizontalHeaderItem(7)
|
||||
item.setText(_translate("Form", "序号"))
|
||||
item = self.tableWidget.horizontalHeaderItem(8)
|
||||
item.setText(_translate("Form", "出发地"))
|
||||
item = self.tableWidget.horizontalHeaderItem(9)
|
||||
item.setText(_translate("Form", "目的地"))
|
||||
self.checkBoxPort.setText(_translate("Form", "登机口"))
|
||||
self.checkBoxLicense.setText(_translate("Form", "证件号"))
|
||||
self.pushButtonQuery.setText(_translate("Form", "查询"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
Form = QtWidgets.QWidget()
|
||||
ui = Ui_Form()
|
||||
ui.setupUi(Form)
|
||||
Form.show()
|
||||
sys.exit(app.exec_())
|
||||
|
122
数据库查询显示表格/mainui.ui
Normal file
|
@ -0,0 +1,122 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Form</class>
|
||||
<widget class="QWidget" name="Form">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>362</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxName">
|
||||
<property name="text">
|
||||
<string>姓名</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QCheckBox" name="checkBoxSeat">
|
||||
<property name="text">
|
||||
<string>座位号</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="lineEditName"/>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="4">
|
||||
<widget class="QTableWidget" name="tableWidget">
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>编号</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>姓名</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>证件号</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>航班号</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>航班日期</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>座位号</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>登机口</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>序号</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>出发地</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>目的地</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLineEdit" name="lineEditSeat"/>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QLineEdit" name="lineEditPort"/>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QCheckBox" name="checkBoxPort">
|
||||
<property name="text">
|
||||
<string>登机口</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxLicense">
|
||||
<property name="text">
|
||||
<string>证件号</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="lineEditLicense"/>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="4">
|
||||
<widget class="QPushButton" name="pushButtonQuery">
|
||||
<property name="text">
|
||||
<string>查询</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
342
无边框自定义标题栏窗口/FramelessWindow.py
Normal file
|
@ -0,0 +1,342 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from PyQt5.QtCore import Qt, pyqtSignal, QPoint
|
||||
from PyQt5.QtGui import QFont, QEnterEvent, QPainter, QColor, QPen
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel,\
|
||||
QSpacerItem, QSizePolicy, QPushButton
|
||||
|
||||
|
||||
# Created on 2018年4月30日
|
||||
# author: Irony
|
||||
# site: https://github.com/892768447
|
||||
# email: 892768447@qq.com
|
||||
# file: FramelessWindow
|
||||
# description:
|
||||
__Author__ = """By: Irony
|
||||
QQ: 892768447
|
||||
Email: 892768447@qq.com"""
|
||||
__Copyright__ = 'Copyright (c) 2018 Irony'
|
||||
__Version__ = 1.0
|
||||
|
||||
|
||||
class TitleBar(QWidget):
|
||||
|
||||
# 窗口最小化信号
|
||||
windowMinimumed = pyqtSignal()
|
||||
# 窗口最大化信号
|
||||
windowMaximumed = pyqtSignal()
|
||||
# 窗口还原信号
|
||||
windowNormaled = pyqtSignal()
|
||||
# 窗口关闭信号
|
||||
windowClosed = pyqtSignal()
|
||||
# 窗口移动
|
||||
windowMoved = pyqtSignal(QPoint)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TitleBar, self).__init__(*args, **kwargs)
|
||||
# 支持qss设置背景
|
||||
self.setAttribute(Qt.WA_StyledBackground, True)
|
||||
self.mPos = None
|
||||
self.iconSize = 20 # 图标的默认大小
|
||||
# 设置默认背景颜色,否则由于受到父窗口的影响导致透明
|
||||
self.setAutoFillBackground(True)
|
||||
palette = self.palette()
|
||||
palette.setColor(palette.Window, QColor(240, 240, 240))
|
||||
self.setPalette(palette)
|
||||
# 布局
|
||||
layout = QHBoxLayout(self, spacing=0)
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
# 窗口图标
|
||||
self.iconLabel = QLabel(self)
|
||||
# self.iconLabel.setScaledContents(True)
|
||||
layout.addWidget(self.iconLabel)
|
||||
# 窗口标题
|
||||
self.titleLabel = QLabel(self)
|
||||
self.titleLabel.setMargin(2)
|
||||
layout.addWidget(self.titleLabel)
|
||||
# 中间伸缩条
|
||||
layout.addSpacerItem(QSpacerItem(
|
||||
40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
|
||||
# 利用Webdings字体来显示图标
|
||||
font = self.font() or QFont()
|
||||
font.setFamily('Webdings')
|
||||
# 最小化按钮
|
||||
self.buttonMinimum = QPushButton(
|
||||
'0', self, clicked=self.windowMinimumed.emit, font=font, objectName='buttonMinimum')
|
||||
layout.addWidget(self.buttonMinimum)
|
||||
# 最大化/还原按钮
|
||||
self.buttonMaximum = QPushButton(
|
||||
'1', self, clicked=self.showMaximized, font=font, objectName='buttonMaximum')
|
||||
layout.addWidget(self.buttonMaximum)
|
||||
# 关闭按钮
|
||||
self.buttonClose = QPushButton(
|
||||
'r', self, clicked=self.windowClosed.emit, font=font, objectName='buttonClose')
|
||||
layout.addWidget(self.buttonClose)
|
||||
# 初始高度
|
||||
self.setHeight()
|
||||
|
||||
def showMaximized(self):
|
||||
if self.buttonMaximum.text() == '1':
|
||||
# 最大化
|
||||
self.buttonMaximum.setText('2')
|
||||
self.windowMaximumed.emit()
|
||||
else: # 还原
|
||||
self.buttonMaximum.setText('1')
|
||||
self.windowNormaled.emit()
|
||||
|
||||
def setHeight(self, height=38):
|
||||
"""设置标题栏高度"""
|
||||
self.setMinimumHeight(height)
|
||||
self.setMaximumHeight(height)
|
||||
# 设置右边按钮的大小
|
||||
self.buttonMinimum.setMinimumSize(height, height)
|
||||
self.buttonMinimum.setMaximumSize(height, height)
|
||||
self.buttonMaximum.setMinimumSize(height, height)
|
||||
self.buttonMaximum.setMaximumSize(height, height)
|
||||
self.buttonClose.setMinimumSize(height, height)
|
||||
self.buttonClose.setMaximumSize(height, height)
|
||||
|
||||
def setTitle(self, title):
|
||||
"""设置标题"""
|
||||
self.titleLabel.setText(title)
|
||||
|
||||
def setIcon(self, icon):
|
||||
"""设置图标"""
|
||||
self.iconLabel.setPixmap(icon.pixmap(self.iconSize, self.iconSize))
|
||||
|
||||
def setIconSize(self, size):
|
||||
"""设置图标大小"""
|
||||
self.iconSize = size
|
||||
|
||||
def enterEvent(self, event):
|
||||
self.setCursor(Qt.ArrowCursor)
|
||||
super(TitleBar, self).enterEvent(event)
|
||||
|
||||
def mouseDoubleClickEvent(self, event):
|
||||
super(TitleBar, self).mouseDoubleClickEvent(event)
|
||||
self.showMaximized()
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
"""鼠标点击事件"""
|
||||
if event.button() == Qt.LeftButton:
|
||||
self.mPos = event.pos()
|
||||
event.accept()
|
||||
|
||||
def mouseReleaseEvent(self, event):
|
||||
'''鼠标弹起事件'''
|
||||
self.mPos = None
|
||||
event.accept()
|
||||
|
||||
def mouseMoveEvent(self, event):
|
||||
if event.buttons() == Qt.LeftButton and self.mPos:
|
||||
self.windowMoved.emit(self.mapToGlobal(event.pos() - self.mPos))
|
||||
event.accept()
|
||||
|
||||
|
||||
# 枚举左上右下以及四个定点
|
||||
Left, Top, Right, Bottom, LeftTop, RightTop, LeftBottom, RightBottom = range(8)
|
||||
|
||||
|
||||
class FramelessWindow(QWidget):
|
||||
|
||||
# 四周边距
|
||||
Margins = 5
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(FramelessWindow, self).__init__(*args, **kwargs)
|
||||
self._pressed = False
|
||||
self.Direction = None
|
||||
# 背景透明
|
||||
self.setAttribute(Qt.WA_TranslucentBackground, True)
|
||||
# 无边框
|
||||
self.setWindowFlag(Qt.FramelessWindowHint)
|
||||
# 鼠标跟踪
|
||||
self.setMouseTracking(True)
|
||||
# 布局
|
||||
layout = QVBoxLayout(self, spacing=0)
|
||||
# 预留边界用于实现无边框窗口调整大小
|
||||
layout.setContentsMargins(
|
||||
self.Margins, self.Margins, self.Margins, self.Margins)
|
||||
# 标题栏
|
||||
self.titleBar = TitleBar(self)
|
||||
layout.addWidget(self.titleBar)
|
||||
# 信号槽
|
||||
self.titleBar.windowMinimumed.connect(self.showMinimized)
|
||||
self.titleBar.windowMaximumed.connect(self.showMaximized)
|
||||
self.titleBar.windowNormaled.connect(self.showNormal)
|
||||
self.titleBar.windowClosed.connect(self.close)
|
||||
self.titleBar.windowMoved.connect(self.move)
|
||||
self.windowTitleChanged.connect(self.titleBar.setTitle)
|
||||
self.windowIconChanged.connect(self.titleBar.setIcon)
|
||||
|
||||
def setTitleBarHeight(self, height=38):
|
||||
"""设置标题栏高度"""
|
||||
self.titleBar.setHeight(height)
|
||||
|
||||
def setIconSize(self, size):
|
||||
"""设置图标的大小"""
|
||||
self.titleBar.setIconSize(size)
|
||||
|
||||
def setWidget(self, widget):
|
||||
"""设置自己的控件"""
|
||||
if hasattr(self, '_widget'):
|
||||
return
|
||||
self._widget = widget
|
||||
# 设置默认背景颜色,否则由于受到父窗口的影响导致透明
|
||||
self._widget.setAutoFillBackground(True)
|
||||
palette = self._widget.palette()
|
||||
palette.setColor(palette.Window, QColor(240, 240, 240))
|
||||
self._widget.setPalette(palette)
|
||||
self._widget.installEventFilter(self)
|
||||
self.layout().addWidget(self._widget)
|
||||
|
||||
def move(self, pos):
|
||||
if self.windowState() == Qt.WindowMaximized or self.windowState() == Qt.WindowFullScreen:
|
||||
# 最大化或者全屏则不允许移动
|
||||
return
|
||||
super(FramelessWindow, self).move(pos)
|
||||
|
||||
def showMaximized(self):
|
||||
"""最大化,要去除上下左右边界,如果不去除则边框地方会有空隙"""
|
||||
super(FramelessWindow, self).showMaximized()
|
||||
self.layout().setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
def showNormal(self):
|
||||
"""还原,要保留上下左右边界,否则没有边框无法调整"""
|
||||
super(FramelessWindow, self).showNormal()
|
||||
self.layout().setContentsMargins(
|
||||
self.Margins, self.Margins, self.Margins, self.Margins)
|
||||
|
||||
def eventFilter(self, obj, event):
|
||||
"""事件过滤器,用于解决鼠标进入其它控件后还原为标准鼠标样式"""
|
||||
if isinstance(event, QEnterEvent):
|
||||
self.setCursor(Qt.ArrowCursor)
|
||||
return super(FramelessWindow, self).eventFilter(obj, event)
|
||||
|
||||
def paintEvent(self, event):
|
||||
"""由于是全透明背景窗口,重绘事件中绘制透明度为1的难以发现的边框,用于调整窗口大小"""
|
||||
super(FramelessWindow, self).paintEvent(event)
|
||||
painter = QPainter(self)
|
||||
painter.setPen(QPen(QColor(255, 255, 255, 1), 2 * self.Margins))
|
||||
painter.drawRect(self.rect())
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
"""鼠标点击事件"""
|
||||
super(FramelessWindow, self).mousePressEvent(event)
|
||||
if event.button() == Qt.LeftButton:
|
||||
self._mpos = event.pos()
|
||||
self._pressed = True
|
||||
|
||||
def mouseReleaseEvent(self, event):
|
||||
'''鼠标弹起事件'''
|
||||
super(FramelessWindow, self).mouseReleaseEvent(event)
|
||||
self._pressed = False
|
||||
self.Direction = None
|
||||
|
||||
def mouseMoveEvent(self, event):
|
||||
"""鼠标移动事件"""
|
||||
super(FramelessWindow, self).mouseMoveEvent(event)
|
||||
pos = event.pos()
|
||||
xPos, yPos = pos.x(), pos.y()
|
||||
wm, hm = self.width() - self.Margins, self.height() - self.Margins
|
||||
if self.isMaximized() or self.isFullScreen():
|
||||
self.Direction = None
|
||||
self.setCursor(Qt.ArrowCursor)
|
||||
return
|
||||
if event.buttons() == Qt.LeftButton and self._pressed:
|
||||
self._resizeWidget(pos)
|
||||
return
|
||||
if xPos <= self.Margins and yPos <= self.Margins:
|
||||
# 左上角
|
||||
self.Direction = LeftTop
|
||||
self.setCursor(Qt.SizeFDiagCursor)
|
||||
elif wm <= xPos <= self.width() and hm <= yPos <= self.height():
|
||||
# 右下角
|
||||
self.Direction = RightBottom
|
||||
self.setCursor(Qt.SizeFDiagCursor)
|
||||
elif wm <= xPos and yPos <= self.Margins:
|
||||
# 右上角
|
||||
self.Direction = RightTop
|
||||
self.setCursor(Qt.SizeBDiagCursor)
|
||||
elif xPos <= self.Margins and hm <= yPos:
|
||||
# 左下角
|
||||
self.Direction = LeftBottom
|
||||
self.setCursor(Qt.SizeBDiagCursor)
|
||||
elif 0 <= xPos <= self.Margins and self.Margins <= yPos <= hm:
|
||||
# 左边
|
||||
self.Direction = Left
|
||||
self.setCursor(Qt.SizeHorCursor)
|
||||
elif wm <= xPos <= self.width() and self.Margins <= yPos <= hm:
|
||||
# 右边
|
||||
self.Direction = Right
|
||||
self.setCursor(Qt.SizeHorCursor)
|
||||
elif self.Margins <= xPos <= wm and 0 <= yPos <= self.Margins:
|
||||
# 上面
|
||||
self.Direction = Top
|
||||
self.setCursor(Qt.SizeVerCursor)
|
||||
elif self.Margins <= xPos <= wm and hm <= yPos <= self.height():
|
||||
# 下面
|
||||
self.Direction = Bottom
|
||||
self.setCursor(Qt.SizeVerCursor)
|
||||
|
||||
def _resizeWidget(self, pos):
|
||||
"""调整窗口大小"""
|
||||
if self.Direction == None:
|
||||
return
|
||||
mpos = pos - self._mpos
|
||||
xPos, yPos = mpos.x(), mpos.y()
|
||||
geometry = self.geometry()
|
||||
x, y, w, h = geometry.x(), geometry.y(), geometry.width(), geometry.height()
|
||||
if self.Direction == LeftTop: # 左上角
|
||||
if w - xPos > self.minimumWidth():
|
||||
x += xPos
|
||||
w -= xPos
|
||||
if h - yPos > self.minimumHeight():
|
||||
y += yPos
|
||||
h -= yPos
|
||||
elif self.Direction == RightBottom: # 右下角
|
||||
if w + xPos > self.minimumWidth():
|
||||
w += xPos
|
||||
self._mpos = pos
|
||||
if h + yPos > self.minimumHeight():
|
||||
h += yPos
|
||||
self._mpos = pos
|
||||
elif self.Direction == RightTop: # 右上角
|
||||
if h - yPos > self.minimumHeight():
|
||||
y += yPos
|
||||
h -= yPos
|
||||
if w + xPos > self.minimumWidth():
|
||||
w += xPos
|
||||
self._mpos.setX(pos.x())
|
||||
elif self.Direction == LeftBottom: # 左下角
|
||||
if w - xPos > self.minimumWidth():
|
||||
x += xPos
|
||||
w -= xPos
|
||||
if h + yPos > self.minimumHeight():
|
||||
h += yPos
|
||||
self._mpos.setY(pos.y())
|
||||
elif self.Direction == Left: # 左边
|
||||
if w - xPos > self.minimumWidth():
|
||||
x += xPos
|
||||
w -= xPos
|
||||
else:
|
||||
return
|
||||
elif self.Direction == Right: # 右边
|
||||
if w + xPos > self.minimumWidth():
|
||||
w += xPos
|
||||
self._mpos = pos
|
||||
else:
|
||||
return
|
||||
elif self.Direction == Top: # 上面
|
||||
if h - yPos > self.minimumHeight():
|
||||
y += yPos
|
||||
h -= yPos
|
||||
else:
|
||||
return
|
||||
elif self.Direction == Bottom: # 下面
|
||||
if h + yPos > self.minimumHeight():
|
||||
h += yPos
|
||||
self._mpos = pos
|
||||
else:
|
||||
return
|
||||
self.setGeometry(x, y, w, h)
|