pyqt 點點滴滴


記錄PyQt點點滴滴


1. 對無邊框的QT窗體,設置點擊任務欄按鈕最小化和還原事件

self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowSystemMenuHint |  Qt.WindowMinimizeButtonHint)
    # 第一個參數是設置無邊框。
    # 第二個參數是允許任務欄按鈕右鍵菜單,
    # 第三個參數是允許最小化與還原。

    然後;

    self.showMaximized() # 最小化
    self.showMinimized() # 最大化

2. 普通用戶,啓動pyqt 程序,獲取root權限

pkexec  env  DISPLAY=$DISPLAY  XAUTHORITY=$XAUTHORITY      /opt/bin/client/client_run.sh

 client_run.sh 爲啓動腳本

3. 國際化

1) 生成.ts文件

lupdate  -verbose  *.cpp  -ts  fileName_zh.ts

2) 修改 .ts 文件

linguist-qt4  fileName_zh_CN.ts

3) 生成 .qm 文件

lrelease-qt4  fileName_zh_CN.ts

4. Qt/PyQt 實現 畫對話框窗口圓角

1). 基於重繪

#!/usr/bin/env python
#coding=utf-8

from PyQt4.QtCore import Qt
from PyQt4.QtGui import QDialog, QPainter, QColor


class Dialog(QDialog):
    def __init__(self,parent = None):
        super(Dialog, self).__init__(parent)
        self.setAttribute(Qt.WA_TranslucentBackground, True) # 一定要有
        self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint
                   | Qt.WindowSystemMenuHint | Qt.WindowMinimizeButtonHint
                   | Qt.WindowMaximizeButtonHint)

        self.move(100,100)
        self.setFixedSize(500,300)

    def paintEvent(self, paintEvent):
        painter = QPainter(self)
        painter.setBrush(QColor("#CCCCFF"))
        painter.setPen(QColor("#00FF00"))
        # painter.setRenderHint(QPainter.Antialiasing) ## 抗鋸齒
        painter.drawRoundedRect(0,0,self.width()-1,self.height() -1,20,20)


if __name__ == '__main__':
    from PyQt4.QtGui import QApplication
    import sys
    app = QApplication(sys.argv)
    dlg = Dialog()
    dlg.show()
    app.exec_()

2. 基於setMask過濾

a). QT 實現
    QPainterPath path;
    QRectF rect = QRectF(0,0,480,640);
    path.addRoundRect(rect,5,5);
    QPolygon polygon= path.toFillPolygon().toPolygon();//獲得這個路徑上的所有的點
    QRegion region(polygon);//根據這些點構造這個區域
    setMask(region);
b). PyQt 實現
    path =  QPainterPath()
    rect = QRectF(0,0,self.width(),self.height())
    path.addRoundedRect(rect,10,10)
    polygon = path.toFillPolygon().toPolygon()

    region = QRegion(polygon)
    self.setMask(region)

或者

class Dialog(QDialog):
    def __init__(self,parent = None):
        super(Dialog, self).__init__(parent)
        self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint
                   | Qt.WindowSystemMenuHint | Qt.WindowMinimizeButtonHint
                   | Qt.WindowMaximizeButtonHint)

        self.move(100,100)
        self.setFixedSize(500,300)

        self.bitmap = QBitmap(self.size()) #生成一張位圖
        painter = QPainter(self.bitmap)     #QPainter用於在位圖上繪畫

        painter.fillRect(self.rect(),Qt.white) #填充位圖矩形框(用白色填充) 
        painter.setBrush(QColor(0,0,0)) #黑色Brush
        painter.setRenderHint(QPainter.Antialiasing)
        painter.drawRoundedRect(self.rect(),50,50) #在位圖上畫圓角矩形(用黑色填充)
        #
        self.setMask(self.bitmap) #使用setmask過濾即可

4. 按鈕樣式

setStyleSheet(
 "QPushButton     { background-color:#FFFFFF;"
                               "color:#000000;"
                               "border-color:#FFFFFF;"
                               "font:bold 15pt;"   # 字體大小
                               "border-width:2px;"
                               "border-style:solid;" # 實線
                               "border-radius:8px;"  # 圓角
                                "}"
            "QPushButton:hover{ "
                              "background:red;"
                              "color:#FFFFFF;"
                              "border-color:red;"
                              "border-width:2px;"
                              "border-style:solid;"
                              "border-radius:8px;"
                                "}"
            "QPushButton:pressed{"
                                "background: #FF0000;"
                                "border-color:#3f78ad;"
                                "border-width:2px;"
                                "border-style:solid;"
                                # "border-radius:8px;"
                                "}"
)

5.  窗口拖動

 a). Qt 實現


//在Widget的.h文件中
void mouseMoveEvent(QMouseEvent*event);
void mousePressEvent(QMouseEvent*event);
void mouseReleaseEvent(QMouseEvent*event);
QPointdrag Position;
//在Widget的.cpp文件中
void LoginDialog::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        dragPosition = QPoint(-1, -1);
        event->accept();
    }
}

void LoginDialog::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        dragPosition = event->globalPos() - frameGeometry().topLeft();
        event->accept();
    }
}

void LoginDialog::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() &Qt::LeftButton)
    {
        if (dragPosition != QPoint(-1, -1))
            move(event->globalPos() - dragPosition);
        event->accept();
    }
}

b). PyQt實現

from PyQt4.QtCore import Qt, QPoint
from PyQt4.QtGui import QDialog

class Dialog(QDialog):
    def __init__(self,parent = None):
        super(Dialog, self).__init__(parent)
        self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint
                   | Qt.WindowSystemMenuHint | Qt.WindowMinimizeButtonHint
                   | Qt.WindowMaximizeButtonHint)

        self.setFixedSize(500,300)
        self.__dragPosition = QPoint(-1, -1)

    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton :
            self.__dragPosition = QPoint(-1, -1)
            event.accept()

    def mousePressEvent(self, event):
        if (event.button() == Qt.LeftButton):
            self.__dragPosition = event.globalPos() - self.frameGeometry().topLeft()
            event.accept()

    def mouseMoveEvent(self ,event):
        if (event.buttons() & Qt.LeftButton):
            if (self.__dragPosition != QPoint(-1, -1)):
                self.move(event.globalPos() - self.__dragPosition)
            event.accept()

if __name__ == '__main__':
    from PyQt4.QtGui import QApplication
    import sys
    app = QApplication(sys.argv)
    dlg = Dialog()
    dlg.show()
    app.exec_()

6.  鼠標樣式

QT之鼠標樣式

 QVariant

python列表和QVariant

border="0" width="320" height="86" src="http://music.163.com/outchain/player?type=2&id=16966389&auto=1&height=66">
發佈了46 篇原創文章 · 獲贊 10 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章