常用PyQt API

python

os.path.exists(a_pathFile)

获取python系统路径

import distutils.sysconfig
distutils.sysconfig.get_python_lib(True)

    BASE_EXEC_PREFIX = r'C:\Users\Win_Lin\AppData\Local\Programs\Python\Py...
    BASE_PREFIX = r'C:\Users\Win_Lin\AppData\Local\Programs\Python\Python3...
    EXEC_PREFIX = r'C:\Users\Win_Lin\AppData\Local\Programs\Python\Python3...
    PREFIX = r'C:\Users\Win_Lin\AppData\Local\Programs\Python\Python36-32'
鼠标跟踪 配合QMouseMoveEvent
self.setMouseTracking(True);
self.centralWidget.setMouseTracking(True);

QWidget

#鼠标穿透
self.setAttribute(Qt.WA_TransparentForMouseEvents,True);

#widget背景样式不被父窗体覆盖
self.setAttribute(Qt.WA_StyledBackground, True);

#窗体模态
self.setWindowModality(Qt.ApplicationModal);
  • 1。设置为模态

header 1 | header 2 | header 3 |
---|---|---|---
Qt::NonModal |0 | The window is not modal and does not block input to other windows.
Qt::ApplicationModal | 2 | The window is modal to the application and blocks input to all windows.
Qt::WindowModal | 1 | The window is modal to a single window hierarchy and blocks input to its parent window, all grandparent windows, and all siblings of its parent and grandparent windows.

self.setWindowModality()

QDialog

QWidget::setAttribute(Qt::WA_TransparentForMouseEvents,true);

QMessageBox

  • 1 。 连环确认
msg=QMessageBox.warning(self, '请确认', '已满10条,是否重新开始?',
                    QMessageBox.Yes|QMessageBox.No, QMessageBox.No)
if msg==QMessageBox.Yes:
    #ToDo

elif msg==QMessageBox.No:
    msg=QMessageBox.warning(self, '生成脚本', '开始生成脚本。',
                    QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes)
                    
    if msg==QMessageBox.Yes:
        #ToDo
    elif msg==QMessageBox.No:
        #ToDo
  • 2 。 弹窗报错装饰器
import traceback
from PyQt5 import  QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

def showERROR():
    def _doWhat(fun)
        try:
            func()
        except:
            errmsg = traceback.format_exc()      
            QMessageBox.warning(QWidget(), '请确认', errmsg,
                        QMessageBox.Ok)
    return _doWhat()

QAbstractItemView

#只读
self.setEditTriggers(QAbstractItemView.NoEditTriggers); 

QTableWidget

  • 1 。充满行/列宽
header 1 header 2 header 3 header 4
QHeaderView::Interactive 0 可拉伸,默认 用户可设置,也可被程序设置成默认大小
QHeaderView::Fixed 2 不可拉,等宽 用户不可更改列宽
QHeaderView::Stretch 1 不可拉 根据空间,自动改变列宽,用户与程序不能改变列宽
QHeaderView::ResizeToContents 3 不可拉,根据内容调整 根据内容改变列宽,用户与程序不能改变列宽
self.horizontalHeader().setSectionResizeMode(3)#列宽设置

self.horizontalHeader().setStretchLastSection(True); #充满列宽    

self.verticalHeader().setSectionResizeMode(1)#行高设置          

self.verticalHeader().setStretchLastSection(True); #充满行高   

自动换行

  • 2 。行选择模式


    效果图
self.tableWidget.setSelectionBehavior(QTableWidget.SelectRows)#行选择模式
self.tableWidget.setSelectionMode(QAbstractItemView.SingleSelection);#无法拖拽选择

删除多行

    self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu) #弹出菜单
    self.tableWidget.customContextMenuRequested.connect(self.myListWidgetContext)#右键请求
    
    def myListWidgetContext(self):
        popMenu =QMenu()

        popMenu.addAction(u'删除行',lambda:self.del_Item(1))

        popMenu.exec_(QCursor.pos())#鼠标位置
        
    def del_Item(self, type=1):

        for model_index in self.tableWidget.selectionModel().selectedRows():     
            index = QtCore.QPersistentModelIndex(model_index)         
            self.tableWidget.removeRow(index.row())
            
    # Listwidget
    def del_Item(self, type=1):

        for model_index in self.listWidget.selectedItems():     
            row = self.listWidget.indexFromItem(model_index).row()
            self.listWidget.takeItem(row);

Spacer

self.spacer.changeSize(100, 20, QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum)#改变弹簧长度
self.Layout.invalidate()# 重新布局

Style

app = QtWidgets.QApplication(sys.argv)
  • 1。qt自带
app.setStyle(QStyleFactory.create("Fusion"))
  • 2。三方库
import qdarkstyle
app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) 
  • 3。自定义qss
ui = MainWindow()
styleFile = './style.css'
qssStyle = CommonHelper.readQss( styleFile )  
ui.setStyleSheet( qssStyle )     
ui.show()   

QStatusBar

self.statusBar.showMessage(" 菜单选项被点击了", msec=5000)
self.statusBar.addWidget(*QWidget)#加到左下角
self.statusBar.addPermanentWidget(*QWidget)#加到右下角

https://blog.csdn.net/cqltbe131421/article/details/78646228

buttonGroup

self.buttonGroup.checkedButton().text(), 

QPainter

self.pixmap=QPixmap()
self.pixmap.load(':/image/main.jpg')

def paintEvent(self, e):
    
    painter=QPainter(self) ;
    painter.drawPixmap(0,0,self.width(), self.height(), self.pixmap);

字体图标

  • fontawesome

self.b1.setText("\uf0b1"+ "\n"line+ "你好啊")
self.b2.setText("\uf0e8"+ "\n"
line+ "你好啊")
self.b3.setText("\uf0f0"+ "\n"line+ "你好啊")
self.b4.setText("\uf0ad"+ "\n"
line+ "你好啊")

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyle(QStyleFactory.create("Fusion"))
    
    fontId = QFontDatabase.addApplicationFont(":/image/fontawesome-webfont.ttf")
    fontName = QFontDatabase.applicationFontFamilies ( fontId )[0]
    app.setFont(QFont(fontName, 15));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355