Уведомления

Группа в Telegram: @pythonsu

#1 Май 6, 2014 08:54:14

Mars30
Зарегистрирован: 2014-05-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как из двух окон сделать MDI-приложение?

Привет! У меня есть два окна, по отдельности они работают нормально, мне их надо объединить в MDI-приложение, чтобы сначала появлялось первое окно,а по нажатию кнопки Ок закрывалось и запускалось второе окно. Второе окно взаимодействует с первым через глобальную переменную param. Как мне это реализовать? я читала про создание иакого приложения, но нашла мало информации и нормального примера с пояснениями не было, поэтому у меня ничего не получилось.
Вообще задача состоит в написании программы для многокритериальной оптимизации. Программа должна поддерживать интерактивность, т.е. пользователь вводит в первое окно количество целевых функций, переменных и ограничений, а все последующие окна создаются с учетом этих данных.
вот код:

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_())








Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version