PyQt实现表格显示与多界面调用

最近正好做了这个功能,本来是很简单的一件事,无奈在网上竟然找不到一份完整的答案(找到的绑定模型的太复杂),最终整合了不少代码才实现了功能,于是特此分享给大家。

关于PyQt的入门请参考这篇文章 PyQt 图解Qt Designer工具的使用方法 写得很详细,很适合入门,但是如果没有Qt基础,部分功能在使用上可能会有一些难度,但是入门非常容易的完全可以放心。

其实配置好Qt Designer即可,类似于QtCreator中的Qt Designer,直接使用拖拽设计界面,表格显示我使用了QTableView,下面是界面效果。

直接贴出主程序吧:

# -*- coding: utf-8 -*-
#author:autumoon QQ/vx:4589968
# Form implementation generated from reading ui file 'connect_me.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
#导入程序运行必须模块
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5 import QtCore,QtGui
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

#导入designer工具生成的login模块
from ModelUI import Ui_MainWindow
from callPredict import MyPredictForm

class MyMainForm(QMainWindow, Ui_MainWindow):
 def __init__(self, parent=None):
  super(MyMainForm, self).__init__(parent)
  self.setupUi(self)
  # 添加登录按钮信号和槽。注意display函数不加小括号()
  self.btn_excel1.clicked.connect(self.readExcel1)
  self.btn_excel2.clicked.connect(self.readExcel2)
  self.btn_pic.clicked.connect(self.loadImage1)
  self.another = MyPredictForm()
  self.btn_start.clicked.connect(self.startPredict)

 def showData(self):

  self.tb_excel1.setRowCount(4)
  self.tb_excel1.setColumnCount(3)
  self.tb_excel1.setHorizontalHeaderLabels(['姓名', '性别', '体重(kg)'])

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

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

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

 def readExcel1(self):
  print("点击了readExcel1按钮")
  #这里实现读取excel数据
  self.showData()

 def readExcel2(self):
  print("点击了readExcel2按钮")

 def loadImage1(self):
  print("加载图片1")
  img = QPixmap('.\s.jpg')
  self.lb_pic.setScaledContents(True)
  self.lb_pic.setPixmap(img)

 def startPredict(self):
  self.hide()
  self.another.show()

if __name__ == "__main__":
 #固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
 app = QApplication(sys.argv)
 #初始化
 myWin = MyMainForm()
 #将窗口控件显示在屏幕上
 myWin.show()
 #程序运行,sys.exit方法确保程序完整退出。
 sys.exit(app.exec_())

要注意的是,填充内容之前一定要先设置行列数,不然无显示!

被调用的窗口:

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'connect_me.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
#导入程序运行必须模块
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5 import QtCore,QtGui
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

#导入designer工具生成的login模块
from Predict import Ui_PredictWindow

class MyPredictForm(QMainWindow, Ui_PredictWindow):
    def __init__(self, parent=None):
        super(MyPredictForm, self).__init__(parent)
        self.setupUi(self)
        # 添加登录按钮信号和槽。注意display函数不加小括号()
        self.btn_predict.clicked.connect(self.predictData)

    def predictData(self):

        #获取铁水量和废钢总量
        tsl = self.le_tsl.text()  #字符串
        fgzl = self.le_fgzl.text();

        if len(tsl) == 0:
            #qm = QMessageBox.critical(self, "错误", "铁水量不能为空!", QMessageBox.Ok)
            self.showMessageBox("错误", "铁水量不能为空!")
            return

        # 调用模型,计算结果
        self.le_wendu.setText(tsl)
        self.le_C.setText(fgzl)

    def showMessageBox(self, title, info):
        messageBox = QMessageBox()
        #messageBox.setWindowIcon(QtGui.QIcon(":/newPrefix/logo.ico"))
        messageBox.setWindowTitle(title)
        messageBox.setText(info)
        messageBox.setStandardButtons(QMessageBox.Ok)
        messageBox.setStyleSheet("color: rgb(255, 255, 255);\nbackground-color: rgb(0, 0, 68);")
        buttonOk = messageBox.button(QMessageBox.Ok)
        buttonOk.setText('OK')
        messageBox.exec_()

def CallMain():
    app = QApplication(sys.argv)
    # 初始化
    myWin = MyPredictForm()
    # 将窗口控件显示在屏幕上
    myWin.show()
    # 程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

if __name__ == "__main__":
 #固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
 CallMain()

被调用的窗口应当作为主窗口的成员变量,不然会存在一系列无法正常显示的问题,被调用的窗口可以为任意窗口,主要不要和主窗口同名!

以上就是主要代码了,窗体部分的代码由于一些原因就不展示了,欢迎交流与讨论。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python的openpyxl和pyqt5库来实现pyqt5界面调用显示Excel文件的数据。 首先,需要在pyqt5界面中添加一个按钮或者菜单项来触发调用Excel文件的事件。具体实现代码如下: ```python from PyQt5 import QtWidgets from PyQt5.QtWidgets import QFileDialog import openpyxl class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('Excel Reader') # 添加一个菜单栏 menubar = self.menuBar() fileMenu = menubar.addMenu('File') # 添加一个打开文件的菜单项 openFile = QtWidgets.QAction('Open Excel', self) openFile.triggered.connect(self.showExcelData) fileMenu.addAction(openFile) def showExcelData(self): # 打开文件选择对话框 filename, _ = QFileDialog.getOpenFileName(self, 'Open Excel', '.', 'Excel Files (*.xlsx)') # 读取Excel文件 wb = openpyxl.load_workbook(filename) sheet = wb.active # 获取数据 data = [] for row in sheet.iter_rows(values_only=True): data.append(row) # 创建一个表格显示数据 tableWidget = QtWidgets.QTableWidget() tableWidget.setRowCount(len(data)) tableWidget.setColumnCount(len(data[0])) # 将数据填充到表格中 for i, row in enumerate(data): for j, val in enumerate(row): item = QtWidgets.QTableWidgetItem(str(val)) tableWidget.setItem(i, j, item) # 显示表格 self.setCentralWidget(tableWidget) ``` 在上面的代码中,我们创建了一个名为`MainWindow`的窗口,并在菜单栏中添加了一个名为`Open Excel`的菜单项,用于打开Excel文件并显示其中的数据。 当用户点击`Open Excel`菜单项时,我们使用`QFileDialog`显示一个文件选择对话框,让用户选择要打开的Excel文件。然后,我们使用`openpyxl`库读取Excel文件,并将数据填充到一个`QTableWidget`表格中,最后将表格显示在窗口中心。 需要注意的是,在读取Excel文件时,我们使用`iter_rows`方法获取每一行的数据,并将其转换为一个Python列表。然后,我们遍历这个列表,并将数据填充到`QTableWidget`表格中。 这样,我们就可以在pyqt5界面调用Excel文件并显示其中的数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值