最近正好做了这个功能,本来是很简单的一件事,无奈在网上竟然找不到一份完整的答案(找到的绑定模型的太复杂),最终整合了不少代码才实现了功能,于是特此分享给大家。
关于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()
被调用的窗口应当作为主窗口的成员变量,不然会存在一系列无法正常显示的问题,被调用的窗口可以为任意窗口,主要不要和主窗口同名!
以上就是主要代码了,窗体部分的代码由于一些原因就不展示了,欢迎交流与讨论。