主頁 >  其他 > PyQt5 “PyTuning“除錯軟體從0開發總結

PyQt5 “PyTuning“除錯軟體從0開發總結

2020-11-22 10:11:00 其他

PyQt5 "PyTuning"除錯軟體從0開發總結

北航3系大四要調小車在賽道上跑,小車單片機用的K60,老師提供的代碼里還有串口收發的庫,就想著用藍牙模塊再開發上位機除錯軟體進行遠程除錯,正好借此機會學習了一番PyQt,現在從頭總結一下開發流程~想從0開發的可以參考,

代碼功能:顯示直觀的除錯界面,分兩個執行緒,主執行緒負責處理用戶事件以及顯示,子執行緒處理串口通訊并向主執行緒上報資料,

放一下效果圖~~
文末有全部代碼鏈接
在這里插入圖片描述

開發流程

  • PyQt5 "PyTuning"除錯軟體從0開發總結
  • 一、圖形界面搭建(軀殼)
    • 1,designer的安裝與打開
    • 2,designer使用
    • 3,ui檔案轉py檔案
  • 二、功能實作(靈魂)
    • 1、繼承ui轉出的py軀殼
    • 2、按鍵回呼函式
    • 3、內容顯示與讀取
      • (1) 文字讀寫
      • (2) 圖片顯示
      • (3) 幾何繪圖
    • 4、信號槽與多執行緒
      • (1) 信號槽理解與實體
      • (2) 多執行緒創建
  • 三、結語
    • 專案原始碼:

一、圖形界面搭建(軀殼)

1,designer的安裝與打開

這里博主用了designer進行圖形界面開發,可以手拖控制元件,比純手編直觀多了,強烈推薦快速開發Qt簡單圖形界面的用這種方法,designer安裝及打開方法:

pip install PyQt5
pip install pyqt-tools

如果用的是Anaconda,在Anaconda Prompt上運行上面兩行后,找到anaconda3的安裝目錄并在下面找anaconda3 > Library > bin > designer,建議發送一個快捷方式到桌面上,之后更容易打開,
在這里插入圖片描述

2,designer使用

下面簡單說明一下designer的使用,由于設計的已經非常親民了,就簡略說下,基本你想干嘛,第一反應的操作就能實作,
在這里插入圖片描述
① Widget Box
里面有各種各樣的控制元件可以用,需要啥就把他往最中間要的位置拖就行了,
一些對控制元件選擇的小建議:
1,大的框框用Group Box或 Frame. Group Box能方便的寫小標題,Frame能顯示明顯的框框,雖然這些用最基礎的Widget也能實作,但那兩個更親民直觀好用,
2,文本提示用Label,好用
3,文本輸入用Text Edit或Plain Text Edit,好用
4,大量文本輸出用Text Browser,夠大,能滾動(雖然其他也能)
5,!!!!想顯示圖片或視頻,可以用Label!!!!很方便
6,盡量不要把所有東西都沒有組織地堆到主界面上,不然后期調起來很麻煩,建議多創建幾個框框,把同一個功能用到的控制元件放到這個框框里,再把框框在主界面上拖,

② Main Window
這里是你的創作畫布,一個字:拖!!!
(除了拖還可以雙擊輸入內容,反正操作非常直觀)

③ 物件查看器
這里你可以看你所有控制元件的結構,跟檔案瀏覽器似的,雙擊可以改物件名,
你并不想你的C盤所有檔案全鋪在表面,所以再次建議搭一個比較合理的結構,方便之后寫代碼,

④ 屬性編輯器
這里列了好多控制元件常用的屬性,點一個控制元件就會顯示他的屬性,從上到下依次是該控制元件物件的親戚關系,越往下越是子物件,
在這里細調控制元件的位置很方便!!!

3,ui檔案轉py檔案

designer保存的檔案后綴.ui實際上是XML檔案,想轉成.py檔案開始各種功能的撰寫很容易:在Anaconda Prompt里執行:

pyuic5 -o 檔案路徑\檔案名.py 檔案路徑\檔案名.ui

檔案路徑和檔案名寫自己的,.py檔案就出來了,整個軟體的圖形界面骨架就能用了!!
建議把這段代碼存記事本里!因為你肯定會再在designer里調整界面的hhhh,每次都得再執行一遍

二、功能實作(靈魂)

下面是PyQt界面開發的重頭戲,上面designer造出來的只是個空殼子,現在需要注入靈魂讓他動起來了,

1、繼承ui轉出的py軀殼

這步很重要!!不要直接在剛剛捏出來的py檔案上編!!(他可能有幾百行看起來很相似的代碼,直接搞得你不想動他~)
以下博主就用自己的檔案名做例子了,軀殼檔案叫Racing_Tool.py,在同目錄下創建新的檔案,輸入以下代碼,跑,你會發現你已經繼承了那具軀殼,(import了好多東西是我整個程式用的,先列在這里)

import Racing_Tool
from Vision import Vision, WeightsTuner, RecordDot
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QCoreApplication, QThread, pyqtSignal
from PyQt5.QtGui import QImage, QPixmapimport sys
import serial
import re
import cv2
import numpy as np
from time import perf_counter

racing_tool = Racing_Tool.Ui_Main_Window

class RacingMain(QMainWindow, racing_tool):
    def __init__(self):
        QMainWindow.__init__(self)
        racing_tool.__init__(self)

        self.setupUi(self)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = RacingMain()
    window.show()
    sys.exit(app.exec_())

2、按鍵回呼函式

本程式博主只用了按鍵回呼函式,還有按下enter的回呼函式等,邏輯類似,

def __init__(self):
        QMainWindow.__init__(self)
        racing_tool.__init__(self)
		
        self.setupUi(self)
        self.button_functioning()

def button_functioning(self):
        self.send_steer.clicked.connect(self.on_send_steer)
        self.send_motor.clicked.connect(self.on_send_motor)
        self.send_track.clicked.connect(self.on_send_track)
        self.open_UART.clicked.connect(self.on_open_uart)
        self.data_query.clicked.connect(self.on_data_query)
        self.debug_clear.clicked.connect(self.on_clear_debug)
        self.quit_button.clicked.connect(QCoreApplication.instance().quit)
        self.weights_tuner_button.clicked.connect(self.on_set_weights)
        self.record_button.clicked.connect(self.on_record_tracks)

這樣各種按鍵按下后就都會執行后面的對應的函式了,self.onXXX是函式名,需要之后自己撰寫具體功能,

3、內容顯示與讀取

(1) 文字讀寫

Q是各種文本控制元件的名字
寫:
設定字串:Q.setPlainText(“string”)
追加字串:Q.insertPlainText(“string”)
讀:
讀取字串:buffer = Q.toPlainText()

(2) 圖片顯示

以QLabel 物件為例:

// 圖片顯示
self.img = np.zeros((self.CAMERA_H, self.CAMERA_W, 3), np.uint8) //你的圖片,注意是np.uint8!!!!不是float請用0~255不要0.0~1.0
resized_img = cv2.resize(self.img, None, fx=8, fy=8, interpolation=cv2.INTER_CUBIC) //更改圖片大小
show_image = QImage(resized_img, resized_img.shape[1], resized_img.shape[0],resized_img.shape[1] * 3,QImage.Format_RGB888)
self.MyQLabel.drawPixmap(QRect(0, 0, 640, 480), QPixmap(show_image)) 

博主這里用的是uint8表示的像素的RGB值,float形式的會出問題,還沒研究出來咋弄,

(3) 幾何繪圖

核心物件:QPainter
這里博主參考了一堆零零散散的文章才明白各個陳述句的邏輯關系,在這里統一總結細講一下從0實作繪圖,方便大家理解使用,以顯示小紅點為例,先上基礎代碼:
先建一個新的類,繼承QLabel:

from PyQt5.QtWidgets import QLabel
from PyQt5.QtCore import Qt, QRect, QPoint
from PyQt5.QtGui import QPainter, QColor, QPen, QBrush
import pyqtgraph as pg
import numpy as np


class RecordDot(QLabel):	//繼承QLabel
    def __init__(self, parent_widget):		//創建實體的時候,給出父物件
    										//功能就相當于designer里把這個控制元件拖到另一個控制元件上
        super(RecordDot, self).__init__(parent_widget)	//初始化父物件
        self.name = "RecordDot"		//給自己起個名字
        self.left = 300		//以下四行為定義自己的位置大小,是不是很像designer里的
        self.top = 0		//其實你可以先在designer里拖個QLabel出來看效果,記住幾何資訊
        self.width = 40
        self.height = 40

        self.show = False	//非必要,博主自己的小功能標志位

        self.initUI()	//呼叫UI初始化,其實就是下面這個函式

    def initUI(self):	//下面這些你會發現,designer轉出來的py檔案全是這個,照搬就行
        self.setGeometry(QRect(self.left, self.top, self.width, self.height))
        self.setText("")
        self.setObjectName(self.name)

    def paintEvent(self, qp):	//接下來的參考下文解釋
        if not self.show:
            return
        qp = QPainter()
        qp.begin(self)
        brush = QBrush(Qt.red, Qt.SolidPattern)
        qp.setBrush(brush)
        qp.drawEllipse(QPoint(20, 20), 10, 10)
        qp.end()

接下來著重講解一下這個paintEvent函式,首先定義的時候多給了一個qp引數,這個不用太糾結,名字隨意,給就行了,不給會有小報錯,
插播一個許多新手很關心的問題:paintEvent()是在外面物件實體化之后(記實體為Q),執行Q.update()系統自動呼叫一次的!!!!每次update畫一次

if not self.show:
	return

paintEvent函式會在物件實體化的時候被系統自動執行一次,所以為了不讓他瞎畫,直接先讓他return,當然這句話廣義的功能是,如果我沒選擇讓他顯示,在呼叫paintEvent后,會清空這個物件上畫的所有內容(每次調這個函式會清空之前內容),

// An highlighted block
qp = QPainter()
qp.begin(self)
//具體繪圖的代碼
qp.end()

這三行首先創建了QPainter物件,再指定了開始與結束繪圖的位置,必要!!

具體繪圖方法:

① 選擇自己想要的畫筆

brush = QBrush(Qt.red, Qt.SolidPattern)
qp.setBrush(brush)

如果想畫實心圖形,用QBrush,如果想畫線潭訓幾何輪廓,用QPen,QBrush創建的時候建議用a = QBrush(QColor, style)方法,注意!!!!不要把畫筆顏色RGB直接以串列或元胞形式貼到第一個引數上,要

brush = QBrush(QColor(color[0], color[1], color[2]), Qt.SolidPattern)

然后告訴QPainter使用這個畫筆(qp.setBrush(brush) / qp.setPen(pen))
如果只設定了QBrush則輪廓(QPen)默認為黑色,寬度一像素

②選擇自己想要繪制的圖形

// 推薦繪圖代碼示例
qp.drawEllipse(QPoint(x, y), rx, ry)			//(橢)圓
qp.drawRect(QRect(left, top, width, height))	//矩形
qp.drawLine(QPoint(start_x, start_y), QPoint(end_x, end_y))		//直線段
qp.drawPixmap(QRect(left, top, width, height), QPixmap(image)) 		//圖片顯示

③繪圖代碼放到正確的地方

把所有要畫的東西,包括圖片顯示!!!!!!!重點強調,都依次放進qp.begin(self)和qp.end()之間,這樣每次這個物件被update,就會顯示想要的東西了,

④主程式里呼叫繪圖

class RacingMain(QMainWindow, racing_tool):
    def __init__(self):
        QMainWindow.__init__(self)
        racing_tool.__init__(self)
        self.start_recorded = False		//博主自己的標志位,非必要
        self.setupUi(self)
        self.button_functioning()
        self.RecordDot = RecordDot(self.record_panel)	//物件實體化,self.record_panel是他所在的框框
        
    def button_functioning(self):      
    	self.record_button.clicked.connect(self.on_record_tracks)
    	
    def on_record_tracks(self):
        if not self.start_recorded:
            self.record_button.setText("結束錄制")
            self.RecordDot.show = True		//設為需要繪圖
            self.RecordDot.update()			//這一行呼叫了paintEvent
            self.start_recorded = True
        else:
            self.record_button.setText("開始錄制")
            self.RecordDot.show = False		//設為不用繪圖
            self.RecordDot.update()			//呼叫paintEvent直接return清慷訓圖
            self.start_recorded = False

錄像小紅點就有了!!
在這里插入圖片描述
⑤ 色圖設定(實用功能,非必要)

博主為了直觀顯示某些量的大小,想采用類似Matlab里colormap的方法,這里提供一下核心代碼和實體實作代碼:

核心代碼及理解:

self.colormap = pg.ColorMap([0, 0.5, 1], [[255, 0, 0], [200, 200, 0], [0, 255, 0]])
self.lookup_table = self.colormap.getLookupTable()
color = self.lookup_table[index]

可以這么想象一個色圖:
在這里插入圖片描述

第一句:

self.colormap = pg.ColorMap([0, 0.5, 1], [[255, 0, 0], [200, 200, 0], [0, 255, 0]])

作用就是生成這個圖,先提供一組要插值得點橫坐標[0, 0.5, 1],再在一個串列里列出對應的RGB值[[255, 0, 0], [200, 200, 0], [0, 255, 0]],pyqtgraph庫的ColorMap方法就能插出來上面那樣子的圖,

第二句:

self.lookup_table = self.colormap.getLookupTable()

作用就是把圖離散化,給每一個離散出來的顏色配一個索引值(默認0 ~ 511),類似這樣:
在這里插入圖片描述
第三句:

color = self.lookup_table[int(511 * self.weights[i])]

作用就是從離散色圖取顏色,和取串列元素是一個道理,其實就是個串列,
self.lookup_table[index]就能取色,注意index是0~511的int,總之理解成串列就行了,

實體代碼及效果:

from PyQt5.QtWidgets import QLabel
from PyQt5.QtCore import Qt, QRect, QPoint
from PyQt5.QtGui import QPainter, QColor, QPen, QBrush
import pyqtgraph as pg
import numpy as np
from numpy import sign


class WeightsTuner(QLabel):
    def __init__(self, parent_widget):
        super(WeightsTuner, self).__init__(parent_widget)
        self.name = "WeightsTuner"
        self.left = 0
        self.top = 0
        self.width = 100
        self.height = 480

        self.weights = []

        self.colormap = pg.ColorMap([0, 0.5, 1], [[255, 0, 0], [200, 200, 0], [0, 255, 0]])
        self.lookup_table = self.colormap.getLookupTable()

        self.initUI()

    def initUI(self):
        self.setGeometry(QRect(self.left, self.top, self.width, self.height))
        self.setText("")
        self.setObjectName(self.name)

    def set_weight_values(self, coef):
        self.weights = []
        for i in range(60):
            self.weights.append(np.float_power(i / 60, coef))

    def paintEvent(self, qp):
        if len(self.weights) == 0:
            return
        qp = QPainter()
        qp.begin(self)
        for i in range(60):
            color = self.lookup_table[int(511 * self.weights[i])]
            brush = QBrush(QColor(color[0], color[1], color[2]), Qt.SolidPattern)
            qp.setBrush(brush)
            width = int(100 * self.weights[i])
            qp.drawRect(QRect(0, i * 8, width, 8))
        qp.end()

實作效果:

在這里插入圖片描述

其實色圖實作還有好多引數可以設定,可以更靈活,博主只是從新手的角度出發,提取了最省心實用的使用方法,

4、信號槽與多執行緒

這一部分主要講怎么利用PyQt5的信號槽機制為多執行緒提供資訊互動的方法,并利用QThread創建多執行緒,

(1) 信號槽理解與實體

信號槽是PyQt里傳遞資訊的一個比較穩定實用的方式,邏輯清晰,需要呼叫pyqtsignal庫,信號回應直觀理解:
在這里插入圖片描述
具體實體如下:

①創建信號物件

class RacingMain(QMainWindow, racing_tool):
    # signal transmitting
    
    CMD_data_query = pyqtSignal(str)
    
    def __init__(self):
    ...

建議在class底下直接創建,不要用self,
pyqtSignal()里面的內容表達要傳遞的信號型別,如果信號型別比較復雜,可以拿type()看一下,或者直接pyqtSignal(object)

②系結回呼函式

def transmission_functioning(self):
    self.CMD_data_query.connect(self.serial_thread.handle_send_request)

博主把所有系結放進一個函式里執行了,在各個物件創建完畢后,記得呼叫這個系結初始化函式,
有沒有覺得這個connect和按鍵回呼函式里的差不多?沒錯,本質是一樣的,
connect()里你可以接任意函式名,當信號發射之后就會觸發這個函式,并把之前pyqtSignal(object)里的具體的object當做引數傳遞給這個回呼函式,

③信號發送

self.CMD_send_steer.emit(args)

emit()里的內容型別要對應上之前的pyqtSignal(object)里的型別,

④回呼函式撰寫

這部分就和PyQt關系不大了hhh,自由發揮就好~

(2) 多執行緒創建

PyQt多執行緒很方便,繼承QThread類自己創建個類就好:

class SerialThread(QThread):
    transmit_img = pyqtSignal(object)
    transmit_tracks = pyqtSignal(object)
    transmit_data = pyqtSignal(str)
    handle_acknowledge = pyqtSignal()
    serial_bug_report = pyqtSignal(str)
    state_report = pyqtSignal(bool)

    def __init__(self, port, baud):
        super().__init__()

    def __del__(self):
        self.wait()

	def run(self):
		//你要在子執行緒里執行的代碼

博主這里把我在子執行緒里用的一些信號槽列了一下,對多執行緒創建本身沒啥用,就想推薦一下用這種方法和主執行緒溝通hhhh.

下面三個函式前兩個好理解,第三個run(self):
這個函式是在多執行緒實體被創建出來的時候系統自動開始跑的!!所以不用再糾結怎么讓子執行緒作業了,創建出來他就開始跑run里的代碼了!

三、結語

至此,博主用的所有與PyQt5有關的操作就整理完了!再加上各種功能的實作,最后已經是個比較酷炫實用的除錯界面了,

所有的原始碼,包括designer的ui檔案我放在下面鏈接里了,如需自取~

專案原始碼:

Github: https://github.com/Apokli/PyTuning

百度網盤:https://pan.baidu.com/s/13e4BoRPIoGG53FnI2R_CPg
密碼:8u5c

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/226135.html

標籤:AI

上一篇:非正交多址技術(NOMA)

下一篇:英特爾FPGA技術大會: 加快塑造邊緣、網路和云端的未來

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more