Вообще задача состоит в написании программы для многокритериальной оптимизации. Программа должна поддерживать интерактивность, т.е. пользователь вводит в первое окно количество целевых функций, переменных и ограничений, а все последующие окна создаются с учетом этих данных.
вот код:
from PyQt4 import QtCore, QtGui param={} class MyWindow(QtGui.QWidget): def __init__(self): super(QtGui.QWidget, self).__init__() self.label1=QtGui.QLabel("Количество целевых функций") self.edcount_obj_fun=QtGui.QTextEdit() self.edcount_obj_fun.setMaximumSize(30,30) self.label2=QtGui.QLabel("Количество переменных") self.edcount_var=QtGui.QTextEdit() self.edcount_var.setMaximumSize(30,30) self.label3=QtGui.QLabel("Количество ограничений") self.edcount_const=QtGui.QTextEdit() self.edcount_const.setMaximumSize(30,30) self.btnOk=QtGui.QPushButton("Ок") grid=QtGui.QGridLayout() grid.addWidget(self.label1,0,0,QtCore.Qt.AlignLeft) grid.addWidget(self.edcount_obj_fun,0,1,QtCore.Qt.AlignLeft) grid.addWidget(self.label2,1,0,QtCore.Qt.AlignLeft) grid.addWidget(self.edcount_var,1,1,QtCore.Qt.AlignLeft) grid.addWidget(self.label3,2,0,QtCore.Qt.AlignLeft) grid.addWidget(self.edcount_const,2,1,QtCore.Qt.AlignLeft) grid.addWidget(self.btnOk,3,0,QtCore.Qt.AlignCenter) self.setLayout(grid) def event(self,e): if e.type()==QtCore.QEvent.Close: param["count_obj_fun"]=self.edcount_obj_fun.toPlainText() param["count_var"]=self.edcount_var.toPlainText() param["count_const"]=self.edcount_const.toPlainText() print(param) return QtGui.QWidget.event(self,e) self.connect(self.btnOk, QtCore.SIGNAL("clicked()"), QtCore.SLOT("close()")) if __name__=="__main__": import sys app=QtGui.QApplication(sys.argv) window=MyWindow() window.resize(210,200) window.setWindowTitle("Ввод целевой функции") window.show() sys.exit(app.exec_()) class MyWindow(QtGui.QWidget): def __init__(self,parent=None): super(QtGui.QWidget,self).__init__() self.grid=QtGui.QGridLayout() i=0 for i in range(1,param["count_obj_fun"]+1): self.grid.addWidget(QtGui.QLabel("Целевая функция f"+str(i)+"="),i-1,0) self.setLayout(self.grid) for i in range(1,param["count_obj_fun"]+1): j=0 for j in range(1,param["count_var"]*2+2): if j!=(param["count_var"]*2+1): if j%2==0: if j<param["count_var"]*2: self.grid.addWidget(QtGui.QLabel("x"+str(int(j/2))+"+"),i-1,j) else: self.grid.addWidget(QtGui.QLabel("x"+str(int(j/2))),i-1,j) else: self.textEdit=QtGui.QTextEdit(self) self.textEdit.setMaximumSize(30, 30) self.grid.addWidget(self.textEdit,i-1,j) else: self.grid.addWidget(QtGui.QLabel("->"),i-1,j) self.ComboBox=QtGui.QComboBox() self.ComboBox.addItem("min", userData=None) self.ComboBox.addItem("max", userData=None) self.grid.addWidget(self.ComboBox,i-1,j+1) self.setLayout(self.grid) if __name__=="__main__": import sys app=QtGui.QApplication(sys.argv) window=MyWindow() window.resize(100,100) window.setWindowTitle("Ввод целевой функции") window.show() sys.exit(app.exec_())