基於PyQt5的模擬磁碟管理

2021-09-13 18:08:17 字數 4579 閱讀 3526

專案中遇到乙個需求就是讀取dvr板上的所有檔案,並模擬windows上的磁碟管理,將所有檔案所占用的空間以及未占用空間都標記出來。

在這裡貼上實現模擬磁碟管理的部分**,記錄一下。

環境如下:pycharm+python3.6+pyqt5。

#! /usr/bin/env python

# -*- coding: utf-8 -*-

# __author__ = "嗯顧"

import sys

from pyqt5 import qtgui

from pyqt5.qtcore import qobject, qt, pyqtsignal

from pyqt5.qtgui import qpainter, qcolor, qpen

class communicate(qobject):

update_widget = pyqtsignal(int, int)

class drawwidget(qwidget):

used_val_list =

used_add_val_list =

used_dict = {}

used_index = 0

start_add = 0

end_add = 0

del_flag = 0

sum_row = 0

def __init__(self, parent=none):

super(qwidget, self).__init__(parent)

self.initui()

def initui(self):

self.setmousetracking(true)

self.setminimumsize(1, 30)

def setvalue(self, start_val, end_val):

self.start_add = start_val

self.end_add = end_val

self.used_index += 1

def paintevent(self, e):

qp = qpainter()

qp.begin(self)

self.drawwidget(qp)

qp.end()

def drawwidget(self, qp):

pen = qpen(qcolor(20, 20, 20), 0.5, qt.solidline)

qp.setpen(pen)

qp.setbrush(qcolor(255, 255, 255))

qp.drawrect(0, 0, self.size().width()-1, self.size().height()-1)

start_val = int(((self.size().width() / 227540992.0) * self.start_add))

end_val = int(((self.size().width() / 227540992.0) * self.end_add))

self.used_add_val_list = [self.start_add, self.end_add, start_val, end_val]

self.used_dict[self.used_index] = self.used_add_val_list

for i in range(self.used_index + 1):

qp.setpen(pen)

qp.setbrush(qcolor(0, 0, 255))

qp.drawrect(self.used_dict.get(i)[3], 0, self.used_dict.get(i)[2] - self.used_dict.get(i)[3],

self.size().height() - 1)

def sequencesearch(self, value):

value = (value * 227540992) / self.size().width()

self.used_val_list.sort()

for i in range(len(self.used_val_list)):

if value > self.used_val_list[i] and value < self.used_val_list[i+1]:

return self.used_val_list[i], self.used_val_list[i+1]

elif value > self.used_val_list[-1]:

return self.used_val_list[-1], 227540992

elif value < self.used_val_list[0] and self.used_val_list[0] != 0:

return 0, self.used_val_list[0]

return -1

def mousemoveevent(self, a0: qtgui.qmouseevent):

if self.sequencesearch(a0.x()) == -1 or self.sequencesearch(a0.x()) == none:

self.settooltip('')

return

else:

start_val, end_val = self.sequencesearch(a0.x())

self.settooltip(

str(hex(start_val)[2:].zfill(8).upper()) + '-' + str(hex(end_val)[2:].zfill(8).upper()))

class space(qwidget):

def __init__(self, parent=none):

super(qwidget, self).__init__(parent)

self.initui()

def initui(self):

self.text1 = qlineedit(self)

self.text1.setgeometry(30, 10, 100, 30)

self.text2 = qlineedit(self)

self.text2.setgeometry(150, 10, 100, 30)

self.btn1 = qpushbutton(self)

self.btn1.settext("點我")

self.btn1.setgeometry(270, 10, 100, 30)

self.btn2 = qpushbutton(self)

self.btn2.settext("清空")

self.btn2.setgeometry(390, 10, 100, 30)

self.communicate = communicate(self)

self.widget = drawwidget(self)

self.widget.setgeometry(30, 60, 500, 30)

self.lab = qlabel(self)

self.lab.settext("第乙個輸入框的值為占用空間的起始位址,第二個輸入框的值為占用空間的結束位址。\r\n\r\n總空間位址範圍為00000000~0d900000,已占用空間為藍色。\r\n\r\n"

"滑鼠放置在某塊區域上,即可出現該塊區域的位址範圍。")

self.lab.setgeometry(30, 100, 600, 80)

self.communicate.update_widget[int, int].connect(self.widget.setvalue)

self.btn1.clicked.connect(self.changevalue)

self.btn2.clicked.connect(self.clearvalue)

self.setgeometry(300, 300, 600, 180)

self.setwindowtitle("test")

self.show()

def changevalue(self):

val1 = int(self.text1.text())

val2 = int(self.text2.text())

self.communicate.update_widget.emit(val1, val2)

self.widget.repaint()

def clearvalue(self):

self.widget.used_val_list.clear()

self.widget.used_dict.clear()

self.widget.used_index = -1

self.widget.repaint()

self.text1.clear()

self.text2.clear()

if __name__ == "__main__":

ex = space()

在此附上執行效果:

PyQt5布局管理之QFormLayout 四

qformlayout是label field式的表單布局,顧明思議,就是實現表單方式的布局,表單是提示使用者進行互動的一種模式,主要有兩列組成,第一列用於顯示資訊,給使用者提示,一般叫做label域,第二列需要使用者進行選擇或輸入,一般叫做field域,label與field的關係就是label關...

學習PyQt5(三) PyQt5的訊號和槽

我 如圖所示,我們建立乙個按鈕及乙個瀏覽器。什麼是訊號?比如按鈕的單擊,雙擊,按下,釋放等,都可以認為是乙個訊號 什麼是槽?對應的訊號,做出什麼應對,這要乙個應對在乙個函式中,我們可以認為這就是乙個訊號 槽關係 在qt designer中點選工具欄 注意不是工具盒 中的這個圖示 點選這個圖示後,就進...

PYQT5模擬中獎小遊戲

開發環境 visual studio code 作業系統 microsoft window 10 python版本 3.7 我們將按下列步驟構建輸出頁面 1 pyqt設計介面 2 物件命名 3 訊號和槽如下圖所示 4 唯讀設定 前四個隨機數處設定為唯讀。4 參考例程 系統包 import sys i...