当前位置: 首页 > 工具软件 > notepad-pyqt5 > 使用案例 >

Python ,pyqt5, 使用到的一些功能记录。

赵征
2023-12-01

sz_log_record,是我的日志记录,没有的可以替换为 print

1.正则匹配数据

p = re.compile(r'(?:[0-9a-fA-F]:?){12}')
data = re.findall(p, data) # 匹配Mac地址

匹配 开头-结尾 的数据
titkes = re.findall((r'开头(.*?)结尾'),data1)
titkes = re.findall((r'var _error = "(.*?)"\n'), r_res.text)

2.获取文件名称

fileName = 'C:/Users/SH/Desktop/导入设备.xlsx'
fileName2 = fileName.split('/')[-1]  # 导入设备.xlsx

3.弹窗提示框

signal_Popup_Qtime_QtCore = QtCore.pyqtSignal(str, str)  # 弹窗信号
self.signal_Popup_Qtime_QtCore.connect(self.signal_Popup)  # 弹窗信号

    def signal_Popup(self, newtypes, news):
        """ 弹窗提示功能 """
        try:
            if newtypes == '警告' or newtypes == '告警':
                QMessageBox.warning(self, '警告', news)
            if newtypes == '提示':
                QMessageBox.information(self, '提示', news)
            if newtypes == '危险':
                QMessageBox.critical(self, '危险', news)
            if newtypes == '问答':
                QMessageBox.question(self, '问答', news)
            if newtypes == '关于':
                QMessageBox.about(self, '关于', news)
            if newtypes == '自定义提示':
                self.class_add_tishi_SHOW(news)
            if newtypes == '自动关闭':
                infoBox = QMessageBox()
                infoBox.setIcon(QMessageBox.Information)
                infoBox.setWindowTitle('提示窗1秒自动关闭')
                infoBox.setText(news)
                infoBox.setStandardButtons(QMessageBox.Ok)
                infoBox.button(QMessageBox.Ok).animateClick(1*1000)       #1秒自动关闭
                infoBox.exec_()
            # import win32api, win32con
            # win32api.MessageBox(0,'警告',news,win32con.MB_OK)
        except Exception as e:
            print('signal_Popup弹窗提示功能异常:%s' % e)

4.将函数打包进线程

def thread_it(self,func, *args):
    """将函数打包进线程"""
    t = threading.Thread(target=func, args=args)
    t.setDaemon(True)
    t.start()

5.config配置文件保存读取

config_init.set('CONFIG_SH', 'config_p_url', self.comboBox.currentText())
config_init.write(open("Config/Config.ini", "w", encoding='utf-8-sig'))  # 执行保存

config_p_url = config_init.get('CONFIG_SH', 'config_p_url')     # 读取数据

6.数据转字典

res = self.http_request(cookie=cookie, router=Divisions, method='GET', type='urlencode')
res.encoding = 'utf-8'
rest = json.loads(res.text)[0]

7.16进制转10进制,10进制转16进制,去除0x

s16 = '0700af5224a9a3016201'
int_data = int(s16,16)
print(int_data)

hex_number = hex(int_data)
print(hex_number)

if hex_number.startswith('0x'):
    hex_number = hex_number[2:]
    print(hex_number)

8.表格使用,创建,删除,读取,修改

https://blog.csdn.net/sanylove/article/details/124591871

9.读取文件,写入文件

with open(f_name, 'rb') as f:
    f_data = f.read()
with open(f_name, 'wb') as code:
    code.write(f_data)

10.默认浏览器打开网址

my_text = "http://" + text  # 合成访问连接
QtGui.QDesktopServices.openUrl(QtCore.QUrl(my_text))  # 调用默认浏览器访问网站

11.打开文件夹

def log_f():
    try:
        path = ".\logs"
        os.startfile(path)
    except Exception as e:
        sz_log.info('日志文件不存在', e)

12.使用记事本打开

def ctalog(self):
    """文件存放路径使用记事本打开日志文件"""
    try:
        if int((self.get_FileSize(config_log_name))) < 10:
            win32api.ShellExecute(0, 'open', 'notepad.exe', log_name, '', 1)
        else:
            path = ".\logs"
            os.startfile(path)
    except Exception as e:
        sz_log.info(e, '文件存放路径使用记事本打开日志文件 错误')

13.打开PDF文件

def cta_instruction():
    try:
        f_name = r'.\tmp\tftp\使用说明.pdf'
        os.startfile(f_name)
    except Exception as e:
        sz_log.info(e, '打开使用说明错误')

14.查看线程数量

thread_num = len(threading.enumerate())
print("【主线程线程数量】:%d \n" % thread_num)
# 打印出当前线程的名称和id
# print("线程名称",threading.currentThread().name)
# print("线程ID",threading.currentThread().ident)

15.自定义检验器

def set_QLineEdit_QValidator(self):
    """ 自定义QLineEdit控件与校验器QValidator"""
    regExp_name = QRegExp('^[a-zA-Z]\w{5,32}$') # 账号
    regExp_password = QRegExp('^[a-zA-Z][a-zA-Z0-9_]{4,15}$') # 密码
    self.lineEdit.setValidator(QRegExpValidator(regExp_name))
    self.lineEdit_2.setValidator(QRegExpValidator(regExp_password))

16.点击表头排序

self.tableWidget.horizontalHeader().sectionClicked.connect(self.sorting_date) # 表头单击信号排序
self.tableWidget.horizontalHeader().setSortIndicatorShown(True)          # 显示排序图标(默认为上下箭头
self.orderType = Qt.DescendingOrder
    def sorting_date(self,index):
        """Qt.AscendingOrder / 降序的方式排列 Qt.DescendingOrder"""
        try:
            if self.orderType == Qt.DescendingOrder and index != 0:
                self.orderType = Qt.AscendingOrder
            else:
                if index != 0:
                    self.orderType = Qt.DescendingOrder
            self.tableWidget.sortItems(index, self.orderType)
        except Exception as e:
            sz_log_record.error(('排序异常:', e))

17.lineEdit 回车执行

self.lineEdit_search.returnPressed.connect(self.tableWidget_search)   # 输入栏回车快捷
def tableWidget_search():
    print('回车快捷')

    def set_lineEdit_ui_add_button(self):
        """ lineEdit 增加搜索按钮"""
        self.clearAction = QAction(self)
        self.clearAction.setIcon(QIcon(":/png/sh_ico/szpng/查询.png"))
        self.clearAction.setToolTip("点击搜索")
        self.lineEdit_search.addAction(self.clearAction, QLineEdit.TrailingPosition)
        self.clearAction.triggered.connect(self.tableWidget_search)

18.列表去重

orgList = ['867296053193104','867296053193104',3,7,7,5]
#list()方法是把字符串str或元组转成数组
formatList = list(set(orgList))
print (formatList)

19.设置tableWidget全列,某列不可编辑

self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) # 设置全列不可编辑
self.tableWidget.setItemDelegateForColumn(0, EmptyDelegate(self))  # 指定第0列不可编辑
self.tableWidget.setItemDelegateForColumn(2, EmptyDelegate(self))  # 指定第2列不可编辑

class EmptyDelegate(QItemDelegate):
    """项目委托列不可编辑"""
    def __init__(self,parent):
        super(EmptyDelegate, self).__init__(parent)

    def createEditor(self, QWidget, QStyleOptionViewItem, QModelIndex):
        """ 项目委托列不可编辑 """
        return None
lies_column = int(self.tableWidget.columnCount())  # 获取当前表格共有多少列
lies_rowCount = int(self.tableWidget.rowCount())   # 获取当前表格共有多少行

#创建表列名
self.tableWidget.setHorizontalHeaderLabels(['第一列','第二列','第三列'])

#获取数据
row = 行
lie = 列
data1 = self.tableWidget.item(row, lie).text()
Run_number = int(self.tableWidget.cellWidget(row, 8).value())    # QtWidgets.QSpinBox() 执行次数

#设置写入数据
data1 = QtWidgets.QTableWidgetItem('数据')
data1.setTextAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) #居中对齐
data1.setForeground(QBrush(QColor(255, 0, 0)))    #设置字体颜色
self.tableWidget.setItem(0, 3, QtWidgets.QTableWidgetItem(data1)) #执行写入数据
#QtCore.Qt.AlignTop ,QtCore.Qt.AlignBottom ,QtCore.Qt.AlignVCenter

# 设置字体颜色
self.tableWidget.item(row, lie).setForeground(QBrush(QColor(255, 0, 0))) #字体颜色红色
self.tableWidget.item(row, lie).setBackground(QColor(0,60,10))          #设置单元格背景颜色
self.tableWidget.item(row, lie).setFont(QFont("微软雅黑", 12))


# 水平方向,表格大小自动拓展到适当的尺寸
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) #不可左右移动
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) #可左右移动
# 最后一列填充满表格
self.tableWidget.horizontalHeader().setStretchLastSection(true)

# 标题头透明
self.tableWidget.horizontalHeader().setStyleSheet("QHeaderView::section{background:rgba(0,0,0,0);}")

# 设置整行选择一次选择一行
self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)  

# 选中一列
self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectColumns) 

# 选中单个单元格
self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectItems) 

# 只能单选
self.tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)

# 行表头,进行隐藏
self.tableWidget.verticalHeader().setVisible(False)  #隐藏列表头   
self.tableWidget.horizontalHeader().setVisible(False)  #隐藏行表头

# 设置0行高50像素
self.tableWidget.setRowHeight(0, 50)  

# 自定义第0列  列宽100像素
self.tableWidget.setColumnWidth(0, 100)  

# 设置表头高度
self.tableWidget.horizontalHeader().setMinimumHeight(35)  

# 不显示表格网线
self.tableWidget.setShowGrid(False) #不显示
self.tableWidget.setShowGrid(true) #显示表格

# 清除已有的行列
row = int(self.tableWidget.rowCount())   # 获取当前表格共有多少行
self.tableWidget.removeRow(row)
 

#不响应鼠标单击
self.tableWidget.headerView.setClickable(false)

#合并单元格
self.tableWidget.setSpan(0, 0, 3, 1)  # 其参数为: 要改变单元格的   1行数  2列数     要合并的  3行数  4列数

# 设置某一列不可编辑第2列不可编辑
self.tableWidget.setItemDelegateForColumn(1, EmptyDelegate(self))  

# 设置全列不可编辑
self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) #不能对表格内容进行修改
self.tableWidget.setEditTriggers(QAbstractItemView.CurrentChanged)#任何时候都能对单元格修改
self.tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked) #双击单元格
self.tableWidget.setEditTriggers(QAbstractItemView.SelectedClicked)#单击已选中的内容
self.tableWidget.setEditTriggers(QAbstractItemView.EditKeyPressed)#当在项目上按下平台编辑键时,编辑就开始了。
self.tableWidget.setEditTriggers(QAbstractItemView.AnyKeyPressed)#按下任意键就能修改
self.tableWidget.setEditTriggers(QAbstractItemView.AllEditTriggers)#以上条件全包括


#设置鼠标跟踪
self.tableWidget.setMouseTracking(True)                                   # 设置跟踪鼠标tableWidget
self.tableWidget.cellEntered.connect(self.upa_ui)                         # 设置跟踪tableWidget 更新UI

# 设置鼠标右键功能
self.tableWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)        # 鼠标右键功能绑定
self.tableWidget.customContextMenuRequested[QtCore.QPoint].connect(self.my_right_click)  # 鼠标右键功能打开浏览器

# 在单元格里加入控件 QtWidgets.QSpinBox(),QPushButton('开始'),QtWidgets.QCheckBox()
send_Btn = QPushButton('开始') # 开始按钮
send_Btn.setIcon(QtGui.QIcon(":/png/shuncom_ico/开启2.png"))
send_Btn.clicked.connect(lambda: self.run_test()) #绑定函数
self.tableWidget.setCellWidget(x, 10, send_Btn)  #执行添加


#查找数据定位
try:
    text = str(self.lineEdit.text())
    items = self.tableWidget.findItems(text, QtCore.Qt.MatchExactly) #遍历表查找对应的item
    item = items[0]
    item.setSelected(True) # 选中单元格
    #item.setForeground(QBrush(QColor(255, 0, 0))) # 设置单元格的背脊颜色为红
    row = item.row()
    # 通过鼠标滚轮定位,快速定位到第十一行
    self.tableWidget.verticalScrollBar().setSliderPosition(row)
except Exception as e:
      print('滚轮定位过去: %s'% e)

# 让滚动条滚动到最底部   
 self.tableWidget.scrollToBottom()  # 让滚动条滚动到最底部   
self.tableWidget.scrollToTop()# 让滚动条滚动到最顶部 
 类似资料: