一文詳解PyQt5中實(shí)現(xiàn)不規(guī)則窗口的顯示
PyQt5 不規(guī)則窗口的顯示
| 函數(shù) | 描述 |
|---|---|
| setMask(self, QBitmap) setMask(self, QRegion) | setMask()的作用是為調(diào)用它的控件增加一個(gè)遮罩,遮住所選區(qū)域以外的部分,使之看起來是透明的。它的參數(shù)可以為QBitmap或QRegion對象。 |
| paintEvent(self, QPaintEvent) | 通過重載paintEvent()函數(shù)繪制窗口背景 |
QPixmap和QBitmap繪圖的效果對比
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPixmap, QPainter, QBitmap
class MyForm(QWidget):
def __init__(self, parent=None):
super(MyForm, self).__init__(parent)
self.setWindowTitle("不規(guī)則窗口的實(shí)現(xiàn)例子")
def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(0, 0, 280, 390, QPixmap(r"./pyqt5/images/dog.jpg"))
painter.drawPixmap(300, 0, 280, 390, QBitmap(r"./pyqt5/images/dog.jpg"))
if __name__ == "__main__":
app = QApplication(sys.argv)
form = MyForm()
form.show()
sys.exit(app.exec_())

不可以拖動(dòng)的不規(guī)則窗口
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPixmap, QPainter, QBitmap
class WinForm(QWidget):
def __init__(self, parent=None):
super(WinForm, self).__init__(parent)
self.setWindowTitle("不規(guī)則窗口的實(shí)現(xiàn)例子")
self.pix = QBitmap("./pyqt5/images/mask.png")
self.resize(self.pix.size())
self.setMask(self.pix)
def paintEvent(self, event):
painter = QPainter(self)
# 在指定區(qū)域直接繪制窗口背景
painter.drawPixmap(0, 0, self.pix.width(), self.pix.height(), QPixmap("./pyqt5/images/screen1.jpg"))
if __name__ == "__main__":
app = QApplication(sys.argv)
win = WinForm()
win.show()
sys.exit(app.exec_())
可以拖動(dòng)的不規(guī)則窗口
import sys
from PyQt5.QtWidgets import QApplication ,QWidget
from PyQt5.QtGui import QPixmap, QPainter , QCursor , QBitmap
from PyQt5.QtCore import Qt
class ShapeWidget(QWidget):
def __init__(self,parent=None):
super(ShapeWidget,self).__init__(parent)
self.setWindowTitle("不規(guī)則的,可以拖動(dòng)的窗體實(shí)現(xiàn)例子")
self.mypix()
# 顯示不規(guī)則 pic
def mypix(self):
self.pix = QBitmap( "./pyqt5/images/mask.png" )
self.resize(self.pix.size())
self.setMask(self.pix)
print( self.pix.size())
self.dragPosition = None
# 重定義鼠標(biāo)按下響應(yīng)函數(shù)mousePressEvent(QMouseEvent)和鼠標(biāo)移動(dòng)響應(yīng)函數(shù)mouseMoveEvent(QMouseEvent),使不規(guī)則窗體能響應(yīng)鼠標(biāo)事件,隨意拖動(dòng)。
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.m_drag=True
self.m_DragPosition=event.globalPos()-self.pos()
event.accept()
self.setCursor(QCursor(Qt.OpenHandCursor))
if event.button()==Qt.RightButton:
self.close()
def mouseMoveEvent(self, QMouseEvent):
if Qt.LeftButton and self.m_drag:
# 當(dāng)左鍵移動(dòng)窗體修改偏移值
self.move(QMouseEvent.globalPos()- self.m_DragPosition )
QMouseEvent.accept()
def mouseReleaseEvent(self, QMouseEvent):
self.m_drag=False
self.setCursor(QCursor(Qt.ArrowCursor))
#一般 paintEvent 在窗體首次繪制加載, 要重新加載paintEvent 需要重新加載窗口使用 self.update() or self.repaint()
def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(0,0,self.width(),self.height(),QPixmap("./pyqt5/images/boy.png"))
if __name__ == '__main__':
app=QApplication(sys.argv)
form=ShapeWidget()
form.show()
app.exec_()

不規(guī)則窗口實(shí)現(xiàn)動(dòng)畫效果
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPixmap, QPainter, QCursor
from PyQt5.QtCore import Qt, QTimer
class ShapeWidget(QWidget):
def __init__(self, parent=None):
super(ShapeWidget, self).__init__(parent)
self.i = 1
self.mypix()
self.timer = QTimer()
self.timer.setInterval(500) # 定時(shí)器每500毫秒更新一次
self.timer.timeout.connect(self.timeChange)
self.timer.start()
# 顯示不規(guī)則圖片
def mypix(self):
self.update()
if self.i == 5:
self.i = 1
self.mypic = {1:'./pyqt5/images/left.png', 2:'./pyqt5/images/up.png', 3:'./pyqt5/images/right.png', 4:'./pyqt5/images/down.png'}
self.pix = QPixmap(self.mypic[self.i], "0", Qt.AvoidDither | Qt.ThresholdDither | Qt.ThresholdAlphaDither)
self.resize(self.pix.size())
self.setMask(self.pix.mask())
self.dragPosition = None
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.m_drag = True
self.m_DragPosition = event.globalPos() - self.pos()
event.accept()
self.setCursor(QCursor(Qt.OpenHandCursor))
def mouseMoveEvent(self, QMouseEvent):
if Qt.LeftButton and self.m_drag:
self.move(QMouseEvent.globalPos() - self.m_DragPosition)
QMouseEvent.accept()
def mouseReleaseEvent(self, QMouseEvent):
self.m_drag = False
self.setCursor(QCursor(Qt.ArrowCursor))
def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(0, 0, self.pix.width(), self.pix.height(), self.pix)
def mouseDoubleClickEvent(self, event):
if event.button() == 1:
self.i += 1
self.mypix()
def timeChange(self):
self.i += 1
self.mypix()
if __name__ == "__main__":
app = QApplication(sys.argv)
win = ShapeWidget()
win.show()
sys.exit(app.exec_())
加載GIF動(dòng)畫效果
import sys
from PyQt5.QtWidgets import QApplication, QLabel, QWidget
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QMovie
class LoadingGifWin(QWidget):
def __init__(self, parent=None):
super(LoadingGifWin, self).__init__(parent)
self.label = QLabel('', self)
self.setFixedSize(128, 128)
self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint)
self.movie = QMovie("./pyqt5/images/loading.gif")
self.label.setMovie(self.movie)
self.movie.start()
if __name__ == "__main__":
app = QApplication(sys.argv)
win = LoadingGifWin()
win.show()
sys.exit(app.exec_())

到此這篇關(guān)于一文詳解PyQt5中實(shí)現(xiàn)不規(guī)則窗口的顯示的文章就介紹到這了,更多相關(guān)PyQt5不規(guī)則窗口顯示內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python pytorch中.view()函數(shù)的用法解讀
這篇文章主要介紹了python pytorch中.view()函數(shù)的用法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Python使用PyCrypto實(shí)現(xiàn)AES加密功能示例
這篇文章主要介紹了Python使用PyCrypto實(shí)現(xiàn)AES加密功能,結(jié)合具體實(shí)例形式分析了PyCrypto實(shí)現(xiàn)AES加密的操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-05-05
Python Collections強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)工具使用實(shí)例探索
這篇文章主要介紹了Python Collections強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)工具的使用實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Python實(shí)現(xiàn)OpenCV的安裝與使用示例
這篇文章主要介紹了Python實(shí)現(xiàn)OpenCV的安裝與使用,結(jié)合實(shí)例形式分析了Python中OpenCV的安裝及針對圖片的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
Pytorch 使用opnecv讀入圖像由HWC轉(zhuǎn)為BCHW格式方式
這篇文章主要介紹了Pytorch 使用opnecv讀入圖像由HWC轉(zhuǎn)為BCHW格式方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
解決一個(gè)pandas執(zhí)行模糊查詢sql的坑
這篇文章主要介紹了解決一個(gè)pandas執(zhí)行模糊查詢sql的坑,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
淺談keras使用預(yù)訓(xùn)練模型vgg16分類,損失和準(zhǔn)確度不變
這篇文章主要介紹了淺談keras使用預(yù)訓(xùn)練模型vgg16分類,損失和準(zhǔn)確度不變,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編小編過來看看吧2020-07-07

