这货很强大,必须掌握。
接着上篇线性规划的实现,本篇利用PyQt5开发简化UI实现上篇的功能。
- UI界面设计,利用designer.exe设计UI界面
其中用到的控件有Push Button、Line Edit、Label、LCD Number、Group Box、Widget.
其中Widget要提升为qtpandas类(后续介绍)
下面就是设计好的UI界面:
运行后的结果:
代码:
UI代码:LPUITest.py
略(用.ui文件转换为py)
tool.py见pyqt5-1初体验.ui转化.py
Pymprog_case.py见运筹优化3-线性规划算法及应用
LPUIRun.py:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from LPUITest import Ui_MainWindow
from qtpandas.models.DataFrameModel import DataFrameModel
import pandas as pd
import numpy as np
import sys
from pymprog_case import *
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.ordermodel = DataFrameModel()
self.capacitymodel = DataFrameModel()
self.resultsmodel = DataFrameModel()
self.widget.setViewModel(self.ordermodel)
self.widget_3.setViewModel(self.capacitymodel)
self.widget_2.setViewModel(self.resultsmodel)
def openfile(self):
openfile_name = QFileDialog.getOpenFileName(self, '选择文件', '', 'Excel files(*.xlsx)')
return openfile_name
@pyqtSlot()
def on_pB_readOrder_clicked(self):
filedir = self.openfile()[0]
self.orderdata = pd.read_excel(filedir, 'Sheet1')
self.lE_readOrder.setText(filedir)
self.ordermodel.setDataFrame(self.orderdata)
@pyqtSlot()
def on_pB_readCapa_clicked(self):
filedir = self.openfile()[0]
self.capacitydata = pd.read_excel(filedir, 'Sheet1')
self.lE_readCapa.setText(filedir)
self.capacitymodel.setDataFrame(self.capacitydata)
@pyqtSlot()
def on_pB_cal_clicked(self):
capacitydata = self.capacitydata.set_index(['Month'])['Capacity'].to_dict()
out, y = capacityOpti(self.orderdata, capacitydata)
optiResults = resultsOutDataFrame(self.orderdata, out)
self.lcdNumber.display(str(int(y)))
self.resultsmodel.setDataFrame(optiResults)
#optiResults.to_excel('reslts.xlsx', index=False)
if __name__ == "__main__":
app = QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(app.exec_())
运筹优化系列,下期进入启发式优化算法。
本文暂时没有评论,来添加一个吧(●'◡'●)