python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性

QTableWidget介绍

QTableWidget是Qt程序中常用的显示数据表格的控件,类似于c#中的DataGrid。QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元数据是通过QTableWidgetItem对象来实现的,使用QTableWidget时就需要QTableWidgetItem。用来表示表格中的一个单元格,整个表格就是用各个单元格构建起来的

QTableWidget类中的常用方法

方法 描述
setROwCount(int row) 设置QTableWidget表格控件的行数
setColumnCount(int col) 设置QTableWidget表格控件的列数
setHorizontalHeaderLabels() 设置QTableWidget表格控件的水平标签
setVerticalHeaderLabels() 设置QTableWidget表格控件的垂直标签
setItem(int ,int ,QTableWidgetItem) 在QTableWidget表格控件的每个选项的单元控件内添加控件
horizontalHeader() 获得QTableWidget表格控件的表格头,以便执行隐藏
rowCount() 获得QTableWidget表格控件的行数
columnCount() 获得QTableWidget表格控件的列数
setEditTriggers(EditTriggers triggers) 设置表格是否可以编辑,设置表格的枚举值
setSelectionBehavior 设置表格的选择行为
setTextAlignment() 设置单元格内文本的对齐方式
setSpan(int row,int column,int rowSpanCount,int columnSpanCount) 合并单元格,要改变单元格的第row行,column列,要合并rowSpancount行数和columnSpanCount列数
row:要改变的行数
column:要改变的列数
rowSpanCount:需要合并的行数
columnSpanCount:需要合并的列数
setShowGrid() 在默认情况下表格的显示是有网格的,可以设置True或False用于是否显示,默认True
setColumnWidth(int column,int width) 设置单元格行的宽度
setRowHeight(int row,int height) 设置单元格列的高度

编辑规则的枚举值类型

方法 描述
setROwCount(int row) 设置QTableWidget表格控件的行数
setColumnCount(int col) 设置QTableWidget表格控件的列数
setHorizontalHeaderLabels() 设置QTableWidget表格控件的水平标签
setVerticalHeaderLabels() 设置QTableWidget表格控件的垂直标签
setItem(int ,int ,QTableWidgetItem) 在QTableWidget表格控件的每个选项的单元控件内添加控件
horizontalHeader() 获得QTableWidget表格控件的表格头,以便执行隐藏
rowCount() 获得QTableWidget表格控件的行数
columnCount() 获得QTableWidget表格控件的列数
setEditTriggers(EditTriggers triggers) 设置表格是否可以编辑,设置表格的枚举值
setSelectionBehavior 设置表格的选择行为
setTextAlignment() 设置单元格内文本的对齐方式
setSpan(int row,int column,int rowSpanCount,int columnSpanCount) 合并单元格,要改变单元格的第row行,column列,要合并rowSpancount行数和columnSpanCount列数
row:要改变的行数
column:要改变的列数
rowSpanCount:需要合并的行数
columnSpanCount:需要合并的列数
setShowGrid() 在默认情况下表格的显示是有网格的,可以设置True或False用于是否显示,默认True
setColumnWidth(int column,int width) 设置单元格行的宽度
setRowHeight(int row,int height) 设置单元格列的高度

表格选择行为的枚举值

选择 描述
QAbstractItemView.SelectItems0Selecting 0 选中单个单元格
QAbstractItemView.SelectRows1Selecting 1 选中一行
QAbstractItemView.SelectColumns2Selecting 2 选中一列

单元格文本水平对齐方式

选项 描述
Qt.AlignLeft 将单元格内的内容沿单元格的左边缘对齐
Qt.AlignRight 将单元格内的内容沿单元格的右边缘对齐
Qt.AlignHCenter 在可用空间中,居中显示在水平方向上
Qt.AlignJustify 将文本在可用空间内对齐,默认从左到右

单元格文本垂直对齐方式

选项 描述
Qt.AlignTop 与顶部对齐
Qt.AlignBottom 与底部对齐
Qt.AlignVCenter 在可用空间中,居中显示在垂直方向上
Qt.AlignBaseline 与基线对齐

如果要设置水平和垂直方向对齐方式,比如在表格空间内上下,左右居中对齐,那么只要使用Qt,AlignHCenter和Qt,AlignVCenter即可

QTableWidget的基本用法实例

import sys
from PyQt5.QtWidgets import *

class Table(QWidget):
  def __init__(self):
    super(Table, self).__init__()
    self.initUI()
  def initUI(self):
    self.setWindowTitle("QTableWidget例子")
    self.resize(400,300)
    layout=QHBoxLayout()

    #实现的效果是一样的,四行三列,所以要灵活运用函数,这里只是示范一下如何单独设置行列
    TableWidget=QTableWidget(4,3)

    # TableWidget = QTableWidget()
    # TableWidget.setRowCount(4)
    # TableWidget.setColumnCount(3)

    #设置水平方向的表头标签与垂直方向上的表头标签,注意必须在初始化行列之后进行,否则,没有效果
    TableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])
    #Todo 优化1 设置垂直方向的表头标签
    #TableWidget.setVerticalHeaderLabels(['行1', '行2', '行3', '行4'])

    #TODO 优化 2 设置水平方向表格为自适应的伸缩模式
    ##TableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

    #TODO 优化3 将表格变为禁止编辑
    #TableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

    #TODO 优化 4 设置表格整行选中
    #TableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)

    #TODO 优化 5 将行与列的高度设置为所显示的内容的宽度高度匹配
    #QTableWidget.resizeColumnsToContents(TableWidget)
    #QTableWidget.resizeRowsToContents(TableWidget)

    #TODO 优化 6 表格头的显示与隐藏
    #TableWidget.verticalHeader().setVisible(False)
    #TableWidget.horizontalHeader().setVisible(False)

    #TOdo 优化7 在单元格内放置控件
    # comBox=QComboBox()
    # comBox.addItems(['男','女'])
    # comBox.addItem('未知')
    # comBox.setStyleSheet('QComboBox{margin:3px}')
    # TableWidget.setCellWidget(0,1,comBox)
    #
    # searchBtn=QPushButton('修改')
    # searchBtn.setDown(True)
    # searchBtn.setStyleSheet('QPushButton{margin:3px}')
    # TableWidget.setCellWidget(0,2,searchBtn)

    #添加数据
    newItem=QTableWidgetItem('张三')
    TableWidget.setItem(0,0,newItem)

    newItem=QTableWidgetItem('男')
    TableWidget.setItem(0,1,newItem)

    newItem=QTableWidgetItem('160')
    TableWidget.setItem(0,2,newItem)

    layout.addWidget(TableWidget)

    self.setLayout(layout)
if __name__ == '__main__':
  app=QApplication(sys.argv)
  win=Table()
  win.show()
  sys.exit(app.exec_())

初始运行程序,显示效果如下

代码分析

构造一个QTableWidget对象,设置表格为4行3列

TableWidget=QTableWidget(4,3)

设置表格头

TableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])

生成一个QTableWidgetItem对象,并添加到表格的0行0列处

newItem=QTableWidgetItem('张三')

TableWidget.setItem(0,0,newItem)

优化1:设置垂直方向表格头标签

TableWidget.setVerticalHeaderLabels(['行1', '行2', '行3', '行4'])

效果如下

优化2:设置表格头为伸缩模式

使用QTableWidget对象的horizontalHeader()函数,设置表格为自适应的伸缩模式,即可根据窗口的大小来改变网格的大小

TableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

优化3:将表格设置为禁止编辑

在默认情况下,表格中的字符是可以更改的,比如双击一个单元格,就可以修改原来的内容,如果想禁止这种操作,让表格对用户只是只读,则可以编辑一下代码

TableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

优化4:表格整行选中

表格默认选择的是单个单元格,通过以下代码可以设置整行选中

TableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)

优化5:将行与列的宽度高度与文本内容的宽高相匹配

QTableWidget.resizeColumnsToContents(TableWidget)

QTableWidget.resizeRowsToContents(TableWidget)

优化6:表格头的显示与隐藏

TableWidget.verticalHeader().setVisible(False)

TableWidget.horizontalHeader().setVisible(False)

优化7:在单元格内放置控件

QTableWidget不仅允许往单元格内放置文字,还允许放置控件,通过QTableWidget.setItem()来添加PyQt的基本控件

这里把一个下拉列表框和一个按钮加入单元格中,设置控件与单元格的边距,如为3px像素,代码如下

 

 comBox=QComboBox()
    comBox.addItems(['男','女'])
    comBox.addItem('未知')
    comBox.setStyleSheet('QComboBox{margin:3px}')
    TableWidget.setCellWidget(0,1,comBox)

    searchBtn=QPushButton('修改')
    searchBtn.setDown(True)
    searchBtn.setStyleSheet('QPushButton{margin:3px}')
    TableWidget.setCellWidget(0,2,searchBtn)

在表格中快速定位到指定行实例

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Table(QWidget):
  def __init__(self):
    super(Table, self).__init__()
    self.initUI()
  def initUI(self):
    #设置标题与初始大小
    self.setWindowTitle('QTableWidget例子')
    self.resize(600,800)

    ##水平布局
    layout=QHBoxLayout()
    #实例化表格视图(30*4)
    tablewidget=QTableWidget(30,4)
    layout.addWidget(tablewidget)

    for i in range(30):
      for j in range(4):
        itemContent='(%d,%d)'%(i,j)
        #为每个表格内添加数据
        tablewidget.setItem(i,j,QTableWidgetItem(itemContent))

    self.setLayout(layout)

    #遍历表格查找对应项
    text='(10,1)'
    items=tablewidget.findItems(text,Qt.MatchExactly)
    item=items[0]
    #选中单元格
    item.setSelected(True)
    #设置单元格的背脊颜色为红
    item.setForeground(QBrush(QColor(255,0,0)))

    row=item.row()
    #通过鼠标滚轮定位,快速定位到第十一行
    tablewidget.verticalScrollBar().setSliderPosition(row)
if __name__ == '__main__':
  app=QApplication(sys.argv)
  table=Table()
  table.show()
  sys.exit(app.exec_())

效果如图

QTableWidget的高级用法实例

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem)
from PyQt5.QtGui import QBrush, QColor, QFont
from PyQt5.QtCore import Qt

class Table(QWidget):
  def __init__(self):
    super().__init__()
    self.initUI()

  def initUI(self):
    #设置标题与初始大小
    self.setWindowTitle("QTableWidget 例子")
    self.resize(430, 230)

    #水平布局,初始表格为(4*3),添加到布局中
    conLayout = QHBoxLayout()
    tableWidget = QTableWidget(5,3)
    conLayout.addWidget(tableWidget)

    #设置水平头标签
    tableWidget.setHorizontalHeaderLabels(['姓名', '性别', '体重(kg)'])

    #创建新条目,设置背景颜色,添加到表格指定行列中
    newItem = QTableWidgetItem("张三")
    #newItem.setForeground(QBrush(QColor(255, 0, 0)))
    tableWidget.setItem(0, 0, newItem)

    # 创建新条目,设置背景颜色,添加到表格指定行列中
    newItem = QTableWidgetItem("男")
    #newItem.setForeground(QBrush(QColor(255, 0, 0)))
    tableWidget.setItem(0, 1, newItem)

    # 创建新条目,设置背景颜色,添加到表格指定行列中
    newItem = QTableWidgetItem("160")
    #newItem.setForeground(QBrush(QColor(255, 0, 0)))
    tableWidget.setItem(0, 2, newItem)

    # newItem = QTableWidgetItem("李四")
    # #将字体加粗,黑色字体
    # newItem.setFont(QFont('Times',12,QFont.Black))
    # tableWidget.setItem(1, 0, newItem)
    #
    # # 创建新条目,设置背景颜色,添加到表格指定行列中
    # newItem = QTableWidgetItem("男")
    # newItem.setFont(QFont('Times', 12, QFont.Black))
    # tableWidget.setItem(1, 1, newItem)
    #
    # # 创建新条目,设置背景颜色,添加到表格指定行列中
    # newItem = QTableWidgetItem("150")
    # newItem.setFont(QFont('Times', 12, QFont.Black))
    # tableWidget.setItem(1, 2, newItem)
    #
    # newItem = QTableWidgetItem("王五")
    # #将字体加粗,黑色字体
    # newItem.setFont(QFont('Times',12,QFont.Black))
    # tableWidget.setItem(2, 0, newItem)
    #
    # # 创建新条目,设置背景颜色,添加到表格指定行列中
    # newItem = QTableWidgetItem("女")
    # newItem.setFont(QFont('Times', 12, QFont.Black))
    # tableWidget.setItem(2, 1, newItem)
    #
    # # 创建新条目,设置背景颜色,添加到表格指定行列中
    # newItem = QTableWidgetItem("175")
    # newItem.setFont(QFont('Times', 12, QFont.Black))

    # 设置单元格文本的对齐方式
    #newItem.setTextAlignment(Qt.AlignRight|Qt.AlignBottom)
    #tableWidget.setItem(2, 2, newItem)

    #按照体重排序
    #Qt.DescendingOrder降序
    #Qt.AscEndingOrder升序
    #tableWidget.sortItems(2,Qt.DescendingOrder)

    #合并单元格
    #tableWidget.setSpan(2,0,4,1)

    #设置单元格的大小
    #将第一列的单元宽度设置为150
    #tableWidget.setColumnWidth(0,150)
    #将第一行的单元格高度的设置为120
    #tableWidget.setRowHeight(0,120)

    #表格中不显示分割线
    #tableWidget.setShowGrid(False)

    #隐藏垂直头标签
    #tableWidget.verticalHeader().setVisible(False)

    self.setLayout(conLayout)

if __name__ == '__main__':
  app = QApplication(sys.argv)
  example = Table()
  example.show()
  sys.exit(app.exec_())

初始运行,效果如下

优化1:设置单元格的文本颜色,将第一行中的三个文本颜色设置为红色

newItem.setForeground(QBrush(QColor(255, 0, 0)))

优化2:将字体加粗

#设置字体类型,大小号,颜色

newItem.setFont(QFont('Times',12,QFont.Black))

优化3:设置单元格的排序方式

from PyQt5.QtCore import Qt
#按照体重排序
#Qt.DescendingOrder降序
#Qt.AscEndingOrder升序
tableWidget.sortItems(2,Qt.DescendingOrder)

优化4:单元格的文本对齐方式

这里更改了王五体重的文本对齐方式为右下角处

 # 设置单元格文本的对齐方式(右下)
newItem.setTextAlignment(Qt.AlignRight|Qt.AlignBottom)
    tableWidget.setItem(2, 2, newItem)

优化5:合并单元格

将表格中第一行第一列的单元格,更改为占据5行1列

#合并单元格
tableWidget.setSpan(2,0,5,1)

优化6:设置单元格的大小

这里将第一行宽度设置为150,高度设置为120

#将第一列的单元宽度设置为150
tableWidget.setColumnWidth(0,150)
#将第一行的单元格高度的设置为120
tableWidget.setRowHeight(0,120)

优化7:在表格中不显示分割线

QTableWidget类的setShowGrid()函数是从QTableView类继承的,用来设置是否显示表格的分割线,默认显示分割线

#表格中不显示分割线

tableWidget.setShowGrid(False)

优化8:为单元格添加图片

还可以在单元格内添加图片并显示图片描述信息,代码如下

这里图片放置在王五体重的单元格内

#添加图片
newItem = QTableWidgetItem(QIcon("./images/bao1.png"), "背包")
tableWidget.setItem(2, 2, newItem)

单元格内图片的显示实例

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Table(QWidget):
  def __init__(self):
    super().__init__()
    self.initUI()

  def initUI(self):
    #设置标题与初始大小
    self.setWindowTitle("QTableWidget 例子")
    self.resize(1000 ,900);
    #设置布局,初始表格5*3
    conLayout = QHBoxLayout()
    table= QTableWidget(5,3)

    #设置表格水平头标签
    table.setHorizontalHeaderLabels(['图片1' ,'图片2' ,'图片3'])
    #设置不可编辑模式
    table.setEditTriggers( QAbstractItemView.NoEditTriggers)
    #设置图片的大小
    table.setIconSize(QSize(300 ,200))

    #设置所有行列宽高数值与图片大小相同
    for i in range(3):  # 让列宽和图片相同
      table.setColumnWidth(i , 300)
    for i in range(5):  # 让行高和图片相同
      table.setRowHeight(i , 200)

    for k in range(15):
      i = k/ 3
      j = k % 3

      #实例化表格窗口条目
      item = QTableWidgetItem()
      #用户点击表格时,图片被选中
      item.setFlags(Qt.ItemIsEnabled)
      #图片路径设置与图片加载
      icon = QIcon(r'.\images\bao%d.png' % k)
      item.setIcon(QIcon(icon))
      #输出当前进行的条目序号
      print('e/icons/%d.png i=%d j=%d' % (k, i, j))
      #将条目加载到相应行列中
      table.setItem(i, j, item)

    conLayout.addWidget(table)
    self.setLayout(conLayout)

if __name__ == '__main__':
  app = QApplication(sys.argv)
  example = Table()
  example.show()
  sys.exit(app.exec_())

效果如下

支持右键菜单实例

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Table(QWidget):
  def __init__(self):
    super(Table, self).__init__()
    self.initUI()

  def initUI(self):
    # 设置标题与初始大小
    self.setWindowTitle('QTableWidget demo')
    self.resize(500, 300)

    # 水平布局,初始表格5*3,添加到布局
    layout = QHBoxLayout()
    self.tableWidget = QTableWidget(5, 3)
    layout.addWidget(self.tableWidget)

    # 设置表格水平方向的头标签
    self.tableWidget.setHorizontalHeaderLabels([ '姓名', '性别', '体重' ])

    # 设置水平方向自动伸缩填满窗口
    self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

    # 添加数据到指定行列
    newItem = QTableWidgetItem("张三")
    self.tableWidget.setItem(0, 0, newItem)

    newItem = QTableWidgetItem("男")
    self.tableWidget.setItem(0, 1, newItem)

    newItem = QTableWidgetItem("160")
    self.tableWidget.setItem(0, 2, newItem)

    newItem = QTableWidgetItem("李四")
    self.tableWidget.setItem(1, 0, newItem)

    newItem = QTableWidgetItem("女")
    self.tableWidget.setItem(1, 1, newItem)

    newItem = QTableWidgetItem("120")
    self.tableWidget.setItem(1, 2, newItem)

    # 允许右键产生菜单
    self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
    # 将右键菜单绑定到槽函数generateMenu
    self.tableWidget.customContextMenuRequested.connect(self.generateMenu)

    self.setLayout(layout)

  def generateMenu(self, pos):
    # 计算有多少条数据,默认-1,
    row_num = -1
    for i in self.tableWidget.selectionModel().selection().indexes():
      row_num = i.row()

    # 表格中只有两条有效数据,所以只在前两行支持右键弹出菜单
    if row_num < 2:
      menu = QMenu()
      item1 = menu.addAction(u'选项一')
      item2 = menu.addAction(u'选项二')
      item3 = menu.addAction(u'选项三')
      action = menu.exec_(self.tableWidget.mapToGlobal(pos))
      # 显示选中行的数据文本
      if action == item1:
        print('你选了选项一,当前行文字内容是:', self.tableWidget.item(row_num, 0).text(),
           self.tableWidget.item(row_num, 1).text(),
           self.tableWidget.item(row_num, 2).text())
      if action == item2:
        print('你选了选项二,当前行文字内容是:', self.tableWidget.item(row_num, 0).text(),
           self.tableWidget.item(row_num, 1).text(),
           self.tableWidget.item(row_num, 2).text())
      if action == item3:
        print('你选了选项三,当前行文字内容是:', self.tableWidget.item(row_num, 0).text(),
           self.tableWidget.item(row_num, 1).text(),
           self.tableWidget.item(row_num, 2).text())

if __name__ == '__main__':
  app = QApplication(sys.argv)
  example = Table()
  example.show()
  sys.exit(app.exec_())

本文详细介绍了PyQt5中QTableWidget控件详细使用方法与属性实例其中包括QTableWidget控件单元格内添加图片,单元格字体,单元格内添加下拉控件,等各种实例,更多关于QTableWidget控件使用方法请查看下面的相关链接

(0)

相关推荐

  • Pycharm+Python+PyQt5使用详解

    1,打开cmd安装PyQt5 pip install pyqt5 2,PyQt5不再提供Qt Designer等工具,所以需要再安装pyqt5-tools pip install pyqt5-tools 3,打开Pycharm,进入设置,添加外部工具 4,添加QtDesigner,exe的路径在安装目录下C:\Program Files\Python35\Lib\site-packages\pyqt5-tools\designer.exe 5,设置"PyUIC"-- 这个主要是用来将

  • python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法

    本文主要列出来python图形开发GUI库pyqt5的窗体,控件属性与方法如果你想看看python图形开发GUI库pyqt5的基础使用方法可以查看我们的另一篇文章 python图形开发GUI库pyqt5的基本使用方法详解 基本框架 import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class Demo(QWidget): def __init__(self):

  • Python GUI库PyQt5样式QSS子控件介绍

    QSS子控件 QSS子控件实际上也是一种选择器,其应用在一些复合控件上,典型的如QComboBox,该控件的外观是,有一个矩形的外边框,右边有一个下拉箭头,点击之后会弹出下拉列表,例如: QComboBox:drop-down {image:url(dropdown.png)} 上面的样式指定所有的QComboBox下拉箭头的图片是自定义的,图片文件为dropdown.png ::drop-down子控件选择器可以与上面提到到的选择器一起联合使用,例如 QComboBox#myQComboBox

  • 使用virtualenv创建Python环境及PyQT5环境配置的方法

    一.写在前面 从学 Python 的第一天起,我就知道了使用 pip 命令来安装包,从学习爬虫到学习 Web 开发,安装的库越来越多,从 requests 到 lxml,从 Django 到 Flask,各种各样的库都处在一个 Python 环境之中. 这种做法对于我这种懒人来说是再适合不过的了,但是这样也是会有问题的.第一个问题在于 Pycharm 的加载速度变得慢了,因为要导入太多包了,而其中很多包对于很多程序来说根本用不上.第二个问题在于很多模块之间是有版本要求的,都需要特定的版本才能执行

  • Python使用PyQt5/PySide2编写一个极简的音乐播放器功能

    疫情肆虐,憋在家实在无聊,索性写点东西,于是就有了这个极极极极极简的音乐播放器. 这个极极极简的音乐播放器类似于"阅后即焚"的软件,播放器可以随机播放歌曲,获取下一首歌曲,不能重新播放上一首歌曲,不能获取歌曲的名称和演唱者.听过的歌曲,就像过眼云烟,放完即散. 下面来看看如何用Python实现这个音乐播放器软件吧! 一.创建UI界面 首先,我们来创建这个播放器的UI界面.这个播放器一共有6个控件: 左上角的程序关闭按钮: 左侧的播放状态标签: 顶部的slogan; 播放/暂停按钮: 下

  • python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍

    信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方. 在linux.windows等 GUI 工具包中,GUI组件都会注册回调函数用于处理组件所触发的动作,通常是注册对应的函数的函数指针.在之前关于Button的文章中提到了信号与槽的机制的使用,通过该机制可以很好的将组件的信号(如button的clocked.toggled.pressed等)和处理该信号的槽关

  • 利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统

    基于python opencv人脸识别的签到系统前言先看下效果实现的功能开始准备页面的构建功能实现代码部分总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人脸实时签到系统,作者某二本大学里的末流学生,写于2019/09/,python学习期间. 今年7月份开始接触python的,最近闲着无事就开始做了这个人脸识别的系统,一开始的话就想着简单的弄下,就去了百度智能云用的api接口实现的,写完以后我就想为什么我不自己写一个人脸识别签到,不去调用百度api接口,然后就诞生了

  • python GUI库图形界面开发之PyQt5动态加载QSS样式文件

    在Qt中经常需要使用样式,为了降低耦合性(与逻辑代码分离),我们通常会定义一个QSS文件,然后编写各种控件(QLabel,QLIneEdit,QPushButton等)的样式,最后使用QApplication或QMainWindow来加载样式,这样就可以让整个应用程序共享一种样式了 编写QSS 首先新建一个扩展名为.qss的文件,如style.qss,然后将其加入资源文件(.qrc)中,在style.qss文件中编写样式代码,例如 QMainWindow{ border-image:url(./

  • Python3和pyqt5实现控件数据动态显示方式

    最近笔者在做一个pyqt5的界面,由于在日常生活中,一些实际运用的场合都需要对数据进行实时的刷新,例如对某个数值的监控,水温,室温的监控等等,都需要实时的刷新控件显示的数据. 对于实现这样的一种功能,pyqt5在面板生成的同时就固定住了UI中的数据,例如我们产生一个QLineEdit控件,然后布局在面板上,但是控件中的数据是固定的,如果这个数据是实时更新的,想要改变空间中的数据时,就要去刷新面板,pyqt5提供了一个QApplication.processEvents()的命令来刷新整个面板,但

  • 浅谈PyQt5中异步刷新UI和Python多线程总结

    目前任务需要做一个界面程序,PyQt是非常方便的选择,QT丰富的控件以及python方便的编程.近期遇到界面中执行一些后台任务时界面卡死的情况,解决了在这里记录下. PyQt PyQt简介 PyQt是Qt的python接口,PyQt的文档较少,但接口和函数可以完全参照Qt,继承了Qt中大量的控件以及信号机制,十分方便.以下简介一个基本的PyQt程序. - 需要导入的类主要来自三个包 - from PyQt5.QtWidgets import 常用的控件 - PyQt5.QtCore 核心功能类,

  • python GUI库图形界面开发之PyQt5拖放控件实例详解

    本篇,我们学习PyQt5界面中拖放(Drag 和Drop)控件. 拖放动作 在GUI中,拖放指的是点击一个对象,并将其拖动到另一个对象上的动作.比如百度云PC客户端支持的拖放文件以快速移动文件: 拖放动作能够很直观很方便的在GUI程序中完成一些很复杂或繁琐的操作. 在PyQt中实现拖放 在PyQt5中,我们也可以很轻松地使用拖放功能. 使用Qt设计师或者使用API都可以实现.我们先使用Qt设计师将GUI的图形设计出来,在之前的GUI的基础上,我们新建一个选项卡. 我们新建了一个选项卡,然后在里面

  • python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式,以达到美化图形界面的目的. 本篇文章中,我们就通过一个实际的例子,使用QSS和PyQt5的配置属性,实现图形用户界面的美化工作. 首先上效果图: 一.对界面进行布局和组件的布置 在图像界面编程中,一个好的布局有助于全局把控界面的形态,而在PyQt5中,有多种布局的方式供我们选择,比较常用的布局有以下

  • python如何通过pyqt5实现进度条

    这篇文章主要介绍了python如何通过pyqt5实现进度条,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python太博大精深了,使用场景非常多.最近笔者一直使用PyQt5编一些小程序,顺便就把一些常用的东西列出来,做个记录和积累吧. 进度条是非常常用的东西,今天用的时候,顺便温习了一下,这个东西自己感觉没啥可讲的,最好的办法就是例子来说明:下面给一个简单的例子. 基本进度条使用: 进度条的函数如下: self.pbar = QProgres

  • python GUI库图形界面开发之PyQt5信号与槽基本操作

    信号与槽基本操作 进入Qt Designer,加入控件,本文以按钮为例. 按F4开始后,选择需要加入信号与槽的按钮,如下图所示该按钮会变红,按住鼠标拉出一条红线,若该按钮需控制旁边的label,则红线连接到label上(图1),若对框体(MainWindow)进行操作,则链接到框体上,会出现一个像物理中"地线"似的符号(图2). 图1 图2 连接后,会弹出如下窗体(图3),左侧界面选择信号,如下图中选择"clicked()"代表点击按钮触发右侧对应槽的操作. 勾选下

  • python图形开发GUI库pyqt5的基本使用方法详解

    一:安装PyQt5 pip install pyqt5 如果你的系统没有安装pip请阅读我们的另一篇文章 windows下python安装pip方法详解 二:PyQt5简单使用 #!/usr/bin/python3 # -*- coding: utf-8 -*- """ Py40.com PyQt5 tutorial In this example, we create a simple window in PyQt5. author: Jan Bodnar website:

  • python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例

    窗口背景主要包括,背景色与背景图片,设置窗口背景有三种方法 使用QSS设置窗口背景 使用QPalette设置窗口背景 实现PainEvent,使用QPainter绘制背景 QSS设置窗口背景 在QSS中,我们可以使用Background或者background-color的方式来设置背景色,设置窗口背景色之后,子控件默认会继承父窗口的背景色,如果想要为控件设置背景图片或图标,则可以使用setPixmap或则setIcon来完成.关于这两个函数的用法,可以参考本博客下的PyQt5的基础控件分栏 实

  • Python GUI库PyQt5图形和特效样式QSS介绍

    QSS介绍前言 QSS即Qt样式表,是用来自定义控件外观的一种机制,QSS大量参考了Css的内容,但QSS的功能要比Css弱得多,体现在选择器少,可以使用的QSS属性也少,而且并不是所有的属性都可以应用在PyQt的控件上,QSS使页面美化跟代码层分开,利于维护 QSS的语法规则 QSS的语法规则几乎与CSS相同,QSS样式由两部分组成,其中一部分是选择器(Selector),指定哪些软件会受到影响,另一部分是声明(Declaration),指定哪些属性应该在控件上进行设置,声明部分是一系列的"属

  • python GUI库图形界面开发之PyQt5开发环境配置与基础使用

    PyQt5安装 在cmd下输入 pip install PyQt5 完成PyQt5安装,再安装qt designer,可以使用pip安装 pip install PyQt5-tools 安装完成后,在python安装目录下可以看到 配置PyCharm 配置PyCharm是为了在Pycharm里面实现打开qt designer,然后生成qt文件,然后将qt文件转换成python语言的软件文件. 打开Pycharm,按下图操作 打开Extrernal Tools之后,点击上如绿色的+,添加Tools

随机推荐