PyQt5实现表格

本文记录python的gui编程笔记。利用pyqt5初步实现表格工具,并实现事件的绑定

基本代码如下,

基本思路为利用QHBoxLayout定义横向布局容器,然后在该横向布局容器中添加表格(QTableWidget) :

import sys
from PyQt5.QtWidgets import QApplication ,QTableWidget ,QWidget,QHBoxLayout,QPushButton


class Example(QWidget):
    def __init__(self,parent=None):
        super(Example,self).__init__(parent)
        self.setWindowTitle("挨踢的表格布局")
        ### 设置大小
        # self.setFixedSize(300,300)  ## 固定大小
        self.setMinimumSize(400,200)  ## 最小尺寸
        self.setMaximumSize(600,300)  ## 最大尺寸
        hlayout = QHBoxLayout() ## 水平部件
        ### 创建表格
        self.tableWidget = self.build_table()

        ### hlayout布局中添加表格
        hlayout.addWidget(self.tableWidget)
        self.setLayout(hlayout)
        self.show()  ### 加入self.show才会显示界面

    def build_table(self):
        tab = QTableWidget(4,3) ## 创建一个4行3列的表格
        return tab

if __name__=="__main__":
    app = QApplication(sys.argv)
    aa = Example()
    sys.exit(app.exec_()) # 进入事件循环

效果如下:图片

点击事件的绑定

现在欲实现当用户操作表格时触发的函数。用到的接口为<QTableWidget_obj>.clicked.connect,传入的参数为定义的触发函数。

import sys
from PyQt5.QtWidgets import QApplication ,QTableWidget ,QWidget,QHBoxLayout,QPushButton,QMessageBox

class Example(QWidget):
    def __init__(self,parent=None):
        super(Example,self).__init__(parent)
        self.setWindowTitle("挨踢的表格布局")
        ### 设置大小
        # self.setFixedSize(300,300)  ## 固定大小
        self.setMinimumSize(400,200)  ## 最小尺寸
        self.setMaximumSize(600,300)  ## 最大尺寸
        hlayout = QHBoxLayout() ## 水平部件
        ### 创建表格
        self.tableWidget = self.build_table()
        ### hlayout添加表格
        hlayout.addWidget(self.tableWidget)
        self.setLayout(hlayout)
        self.show()  ### 加入self.show才会显示界面

    def build_table(self):
        tab = QTableWidget(4,3) ## 创建一个4行3列的表格
        tab.setHorizontalHeaderLabels(["列1","列2","列3"])
        tab.clicked.connect(self.listen_table_clicked)
        return tab

    def listen_table_clicked(self):
        col = self.tableWidget.currentColumn() ## 获取当前列
        row = self.tableWidget.currentRow() ## 获取当前行
        msg = QMessageBox.information(self,"提示","你点击了行{}列{}的单元格".format(col+1,row+1),QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)
    

if __name__=="__main__":
    app = QApplication(sys.argv)
    aa = Example()
    sys.exit(app.exec_()) # 进入事件循环

实际效果如下:

点击查看原文和演示效果

简介:开源CAE技术爱好者,编程爱好者,计算力学,欢迎志同道合的朋友一起交流。欢迎关注微信公众号:挨踢的土木佬
(0)
打赏 喜欢就点个赞支持下吧 喜欢就点个赞支持下吧

声明:本文来自“挨踢的土木佬”,分享链接:https://www.zyxiao.com/p/301764    侵权投诉

网站客服
网站客服
内容投稿 侵权处理
分享本页
返回顶部