Categories
python

PyQt5 QStackedWidget 使用方法

initialize sub component

self.Stack = QStackedWidget (self)
self.Stack.addWidget (self.stack1)
self.Stack.addWidget (self.stack2)
self.Stack.addWidget (self.stack3)

事件触发关联

self.leftlist.currentRowChanged.connect(self.display)

切换页面

def display(self,i):
    self.Stack.setCurrentIndex(i)
Categories
python

QT 使用图片作为背景

convertToQtFormat = QtGui.QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QImage.Format_RGB888)
									#在这里可以对每帧图像进行处理,
									image = convertToQtFormat.scaled(440, 330, Qt.KeepAspectRatio)
									self.video.setPixmap(QPixmap.fromImage(image))

rgbImage.data 是 python图片数组数据

所有组件都可以通过 setPixmap(QPixmap.fromImage(image)) 设置背景图像

import sysfrom PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow

class Ui_MainWindow(object):

def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(270, 180, 241, 101))
self.label.setText("")
self.label.setPixmap(QtGui.QPixmap(":/img/logo.png"))
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

if __name__ == '__main__':import resource  
# 导入添加的资源(根据实际情况填写文件名)
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

设置icon

        self.pushButton_9.setIcon(QtGui.QIcon(QtGui.QPixmap("./resources/setting.png")))
self.pushButton_9.setIconSize(QtCore.QSize(30,30))
Categories
python

QT designer 使用

使用QT designer会生成一系列ui后缀文件

通过pyuic可以将ui文件转化为py文件

python -m PyQt5.uic.pyuic 1.ui -o 1.py
pyuic5 1.ui -o 1.py
pyside6-uic form.ui -o ui_form.py

把1.ui 转换为 1.py

class MainForm(QtWidgets.QMainWindow):
	def __init__(self,parent=None):
		super(MainForm,self).__init__(parent)
		__content = Ui_MainWindow.Ui_MainWindow()
		__content.setupUi(self)
		
	

if  __name__ == "__main__" :
	try: 
		print('start')
		__app = QtWidgets.QApplication(sys.argv) 
		__win = MainForm()
		__win .show()
		sys.exit(__app.exec_())
	except KeyboardInterrupt :
		print('destroy')

__content = Ui_MainWindow.Ui_MainWindow()

这段代码可以换成不同的UI generate的代码 就可以 切换ui文件 看效果

Categories
python

Pyqt 组件说明

Categories
objective-c

object-c UIImageView

UIImageView 是IOS图片控件。点击右上角 加号。可以打开控件窗口

绑定图片到UIImageView

点击UIImageView。右上角image选择图片绑定

Categories
php

laravel 默认 token 校验

调用的是TokenGuard 这个类

数据库user 表有 字段名为 api_token 的校验 用来存放token

用户登录后会获取该token 之后所有请求 都要带上该token

该token没有超时机制 每次获取user个人信息需要根据token查一次数据库 比jwttoken 性能要差

Categories
php

laravel jwt

为api 调用提供身份校验功能

docs https://jwt-auth.readthedocs.io/

install

composer require tymon/jwt-auth

Add the service provider to the providers array in the config/app.php config file as follows:

'providers' => [

    ...

    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]

Run the following command to publish the package config file:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Generate secret key

This will update your .env file with something like JWT_SECRET=XXX

php artisan jwt:secret

该包 修改laravel api 路径下默认的 token校验方式 把token改为JWT token

其实生成流程和校验流程和之前没变化

login 通过用户账号密码 作为 credentials 然后去数据库获取用户信息 该用户信息会生成JWT token 放在laravel 默认缓存管理器

后续请求 在请求头带上 Authorazation : bear $token

通过auth:api 中间件校验

Categories
php

php guzzle 发送http 请求

docs https://docs.guzzlephp.org/

install

composer require guzzlehttp/guzzle

sync get

$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');

echo $response->getStatusCode(); // 200
echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'
echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'

async get

$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {
    echo 'I completed! ' . $response->getBody();
});

$promise->wait();

post

$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.github.com/repos/guzzle/guzzle',
 [
   'headers' => [
        'User-Agent' => 'testing/1.0',
        'Accept'     => 'application/json',
        'X-Foo'      => ['Bar', 'Baz']
    ],
    //'query' => ['foo' => 'bar']  //query params
    //'body' => 'foo'   // plain string BODY
    /* 'form_params' => [   //  application/x-www-form-urlencoded
        'foo' => 'bar',
        'baz' => ['hi', 'there!']
    ]*/
    //'json' => ['foo' => 'bar']]  //json body  application/json

    /*'multipart' => [    multipart    multipart/form-data
        [
            'name'     => 'foo',
            'contents' => 'data',
            'headers'  => ['X-Baz' => 'bar']
        ],
        [
            'name'     => 'baz',
            'contents' => Psr7\Utils::tryFopen('/path/to/file', 'r')
        ],
        [
            'name'     => 'qux',
            'contents' => Psr7\Utils::tryFopen('/path/to/file', 'r'),
            'filename' => 'custom_filename.txt'
        ],
    ]*/


 ],
 
);

echo $response->getStatusCode(); // 200
echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'
echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'
Categories
linux

pacman

pacman 实在msys2 下的包管理器

常用命令

pacman -Ss xxx 包搜索

pacman -S xxx 包安装

用法

pacman [...]

操作

pacman {-h --help} //帮助

pacman {-V --version} //查看版本

pacman {-D --database} //pacman管理数据库选项

pacman {-Q --query} [选项] [软件包] //查询安装包

pacman {-R --remove} [选项] //删除安装包

pacman {-S --sync} [选项] [软件包] //安装安装包

pacman {-U --upgrade} [选项] //更新安装包

使用 'pacman {-h --help}' 及某个操作以查看可得的选项

[zhangy@BlackGhost ~]$ pacman -D --help

用法

pacman {-D --database}

选项

--asdeps 标记为非单独指定安装的软件包

--asexplicit 标记为单独指定安装的软件包

--config 指定另外的配置文件

--logfile 指定另外的日志文件

--noconfirm 不询问确认

--noprogressbar 下载文件时不显示进度条

--noscriptlet 不执行安装小脚本

-v, --verbose 循环执行

-- debug 显示除错信息

-r, --root 指定另外的安装根目录

-b, --dbpath 指定另外的数据库位置

--cachedir 指定另外的软件包缓存位置

--arch 设定另外的架构

[zhangy@BlackGhost ~]$ pacman -Q --help

用法

pacman {-Q --query} [选项] [软件包]

选项

-c, --changelog 查看某软件包的更新日志

-d, --deps 列出所有作为依赖关系安装的软件包 [过滤器]

-e, --explicit 列出所有单独指定安装的软件包 [过滤器]

-g, --groups 查看某软件包组所属的所有软件包

-i, --info 查看软件包信息 (-ii 查看备份文件)

-k, --check 检查该软件包拥有的文件是否存在

-l, --list 列出被查询软件包的内容

-m, --foreign 列出没有在同步数据库时找到的已安装软件包 [过滤器]

-o, --owns 查询哪个软件包拥有

-p, --file 从某个软件包而不是数据库查询

-s, --search 搜寻符合指定字符串的已安装本地的软件包

-t, --unrequired 列出所有不被其他软件包要求的软件包 [过滤器]

-u, --upgrades 列出所有可升级的软件包 [过滤器]

-q, --quiet 在查询或搜索时显示较少的信息

--config 指定另外的配置文件

--logfile 指定另外的日志文件

--noconfirm 不询问确认

--noprogressbar 下载文件时不显示进度条

--noscriptlet 不执行安装小脚本

-v, --verbose 循环执行

-- debug 显示除错信息

-r, --root 指定另外的安装根目录

-b, --dbpath 指定另外的数据库位置

--cachedir 指定另外的软件包缓存位置

--arch 设定另外的架

[zhangy@BlackGhost ~]$ pacman -R --help

用法

pacman {-R --remove} [选项]

选项

-c, --cascade 删除软件包及所有的依赖于此的软件包

-d, --nodeps 略过依赖关系检查

-k, --dbonly 只删除数据库记录,不删除文件

-n, --nosave 同时删除配置文件

-s, --recursive 同时删除 (不会破坏其他软件包的) 依赖关系(-ss·也包括单独指定安装的依赖关系)

-u, --unneeded 同时删除不需要的 (且不会破坏其他软件包的) 依赖关系

--print 仅打印目标而不执行操作

--print-format 指定如何打印目标

--config 指定另外的配置文件

--logfile 指定另外的日志文件

--noconfirm 不询问确认

--noprogressbar 下载文件时不显示进度条

--noscriptlet 不执行安装小脚本

-v, --verbose 循环执行

-- debug 显示除错信息

-r, --root 指定另外的安装根目录

-b, --dbpath 指定另外的数据库位置

--cachedir 指定另外的软件包缓存位置

--arch 设定另外的架构

[zhangy@BlackGhost ~]$ pacman -S --help

用法

pacman {-S --sync} [选项] [软件包]

选项

--asdeps 作为非单独指定安装的软件包安装

--asexplicit 作为单独指定安装的软件包安装

-c, --clean 从缓存目录中删除旧软件包 (-cc 清除所有)

-d, --nodeps 略过依赖关系检查

-f, -force 强制安装,覆盖存在冲突的文件

-g, --groups 查看某软件包组所属的所有软件包

-i, --info 查看软件包信息

-l, --list 查看在该软件库中的软件包清单

-s, --search 按照指定字符串查询远端软件库

-u, --sysupgrade 升级所有已安装的软件包 (-uu 可启用降级)

-w, --downloadonly 下载但不安装/升级软件包

-y, --refresh 从服务器下载新的软件包数据库

--needed 不重新安装已经为最新的软件包

--ignore 升级时忽略某个软件包 (可多次使用)

--ignoregroup 升级时忽略某个软件包组 (可多次使用)

--print 仅打印目标而不执行操作

--print-format 指定如何打印目标

-q, --quiet 在查询或搜索时显示较少的信息

--config 指定另外的配置文件

--logfile 指定另外的日志文件

--noconfirm 不询问确认

--noprogressbar 下载文件时不显示进度条

--noscriptlet 不执行安装小脚本

-v, --verbose 循环执行

-- debug 显示除错信息

-r, --root 指定另外的安装根目录

-b, --dbpath 指定另外的数据库位置

--cachedir 指定另外的软件包缓存位置

--arch 设定另外的架构

[zhangy@BlackGhost ~]$ pacman -U --help

用法

pacman {-U --upgrade} [选项]

选项

--asdeps 作为非单独指定安装的软件包安装

--asexplicit 作为单独指定安装的软件包安装

-d, --nodeps 略过依赖关系检查

-f, -force 强制安装,覆盖存在冲突的文件

-k, --dbonly 添加数据库记录,不安装或保持现存文件

--print 仅打印目标而不执行操作

--print-format 指定如何打印目标

--config 指定另外的配置文件

--logfile 指定另外的日志文件

--noconfirm 不询问确认

--noprogressbar 下载文件时不显示进度条

--noscriptlet 不执行安装小脚本

-v, --verbose 循环执行

-- debug 显示除错信息

-r, --root 指定另外的安装根目录

-b, --dbpath 指定另外的数据库位置

--cachedir 指定另外的软件包缓存位置

--arch 设定另外的架构

实例1

安装包

1,安装或者升级单个软件包

pacman -S mysql

2,有时候在不同的软件仓库中,一个软件包有多个版本(比如extra和community)。你可以选择一个来安装

pacman -S extra/mysql

3,步包数据库并且安装一个软件包

pacman -Sy mysql

实例2

删除包

1,删除单个软件包,保留其全部已经安装的依赖关系

pacman -R mysql

2,删除指定软件包,及其所有没有被其他已安装软件包使用的依赖关系:

pacman -Rs mysql

实例3

升级系统

pacman -Syu

实例4

查询包

1,查询可用安装包

pacman -Ss mysql

2,要查询已安装的软件包:

pacman -Qs mysql

实例5

其他用法

1,清理当前未被安装软件包的缓存

pacman -Sc

2,下载包而不安装

pacman -Sw mysql

实例6

# pacman -Rsc package_name   #要删除软件包和所有依赖这个软件包的程序

# pacman -Rdd package_name   #要删除软件包,但是不删除依赖这个软件包的其他程序:

# pacman 删除某些程序时会备份重要配置文件,在其后面加上*.pacsave扩展名。-n 选项可 以删除这些文件

# pacman -Rn package_name

# pacman -Rsn package_name

# pacman -Si package_name  #显示软件包的详尽的信息

# pacman -Qi package_name  #查询本地安装包的详细信息

# pacman -Qii package_name   #使用两个 -i 将同时显示备份文件和修改状态

# pacman -Ql package_name   #要获取已安装软件包所包含文件的列表

# pacman -Qk package_name   #检查软件包安装的文件是否都存在

# pacman -Qo /path/to/file_name  #查询数据库获取某个文件属于哪个软件包

# pacman -Qdt   #要罗列所有不再作为依赖的软件包(孤立orphans)

# pacman -Qet  #要罗列所有明确安装而且不被其它包依赖的软件包

# pactree package_name  #要显示软件包的依赖树

# pactree -r package_name   #检查一个安装的软件包被那些包依赖
Categories
linux

Msys2

msys2 是在windows上的一个 linux兼容层 执行msys2 相当于打开了一个linux环境

msys2 预装了 pacman 作为包管理器 可以执行pacman 快速安装各种软件