記錄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_()