Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дочернее диалоговое окно PyQt4. Помогите разобраться 
:(
    Опции темы
etopieto
Дата 28.3.2017, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 27.3.2017

Репутация: нет
Всего: нет



Доброе время суток.
Разбираюсь в Python и попутно в PyQt. Вот уже несколько дней бьюсь головой об стену, не получается работать с несколькими формами(классами).
Суть вопроса: есть форма, описанная одним классом. На ней создал кнопку, при нажатии на которую должно открыться окно с иной формой. Вот тут и загвоздка.
Итак, есть у меня три файла.
Первый (основной) main_UI_Form.py  
Код

from PyQt4 import QtCore, QtGui
import sys
import ui_form
import xlrd

class ExampleApp(QtGui.QMainWindow, ui_form.Ui_MainWindow):
    def __init__(self, parent=None):
        super(ExampleApp, self).__init__(parent)
        self.setupUi(self)


def main():
    app = QtGui.QApplication(sys.argv)
    form = ExampleApp()
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()


Второй (модель основной формы, создавался в Designer и далее редактировался)  ui_form.py
Код

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ui_form.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui
import xlrd

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("Aerodynamic Performance"))
        MainWindow.resize(800, 600)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8("PNG/icon.ico")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.gridLayout_2 = QtGui.QGridLayout(self.centralwidget)
        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
        self.tabWidget = QtGui.QTabWidget(self.centralwidget)
        self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
        self.tab_1 = QtGui.QWidget()
        self.tab_1.setObjectName(_fromUtf8("tab_1"))
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(_fromUtf8("PNG/tab_1.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tabWidget.addTab(self.tab_1, icon1, _fromUtf8(""))
        self.tab_2 = QtGui.QWidget()
        self.tab_2.setObjectName(_fromUtf8("tab_2"))
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(_fromUtf8("PNG/tab_2.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tabWidget.addTab(self.tab_2, icon2, _fromUtf8(""))
        self.tab_3 = QtGui.QWidget()
        self.tab_3.setObjectName(_fromUtf8("tab_3"))
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(_fromUtf8("PNG/tab_3.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tabWidget.addTab(self.tab_3, icon3, _fromUtf8(""))
        self.tab_4 = QtGui.QWidget()
        self.tab_4.setObjectName(_fromUtf8("tab_4"))
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap(_fromUtf8("PNG/tab_4.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tabWidget.addTab(self.tab_4, icon4, _fromUtf8(""))
        self.tab_5 = QtGui.QWidget()
        self.tab_5.setObjectName(_fromUtf8("tab_5"))
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap(_fromUtf8("PNG/tab_5.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tabWidget.addTab(self.tab_5, icon5, _fromUtf8(""))
        self.gridLayout_2.addWidget(self.tabWidget, 0, 0, 1, 1)
        self.gridLayout = QtGui.QGridLayout()
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.gridLayout_2.addLayout(self.gridLayout, 1, 1, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        self.menuFile = QtGui.QMenu(self.menubar)
        self.menuFile.setObjectName(_fromUtf8("menuFile"))
        self.menuHelp = QtGui.QMenu(self.menubar)
        self.menuHelp.setObjectName(_fromUtf8("menuHelp"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)
        self.actionQuit = QtGui.QAction(MainWindow)
        icon6 = QtGui.QIcon()
        icon6.addPixmap(QtGui.QPixmap(_fromUtf8("PNG/exit.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionQuit.setIcon(icon6)
        self.actionQuit.setObjectName(_fromUtf8("actionQuit"))
        self.actionAbout = QtGui.QAction(MainWindow)
        icon7 = QtGui.QIcon()
        icon7.addPixmap(QtGui.QPixmap(_fromUtf8("PNG/info.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionAbout.setIcon(icon7)
        self.actionAbout.setObjectName(_fromUtf8("actionAbout"))
        self.menuFile.addAction(self.actionQuit)
        self.menuHelp.addAction(self.actionAbout)
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())

        self.connect(self.actionQuit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

        self.connect(self.actionAbout, QtCore.SIGNAL('triggered()'), self.aboutApp)

        self.Vlayout_tab3 = QtGui.QVBoxLayout(self.tab_3)
        self.Vlayout_tab3.addStretch(1)

        self.OpenFile_btn = QtGui.QPushButton('Открыть файл')
        self.OpenFile_btn.clicked.connect(self.OpenFile)
        self.Vlayout_tab3.addWidget(self.OpenFile_btn)
        self.SelectValues_btn = QtGui.QPushButton('Выбрать значения')
        self.SelectValues_btn.setEnabled(False)
        self.Vlayout_tab3.addWidget(self.SelectValues_btn)
        self.SelectValues_btn.clicked.connect(self.BlockSelection)




        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("Aerodynamic Performance", "Aerodynamic Performance", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_1), _translate("Aerodynamic Performance", "Главная", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Aerodynamic Performance", "Синтаксис", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("Aerodynamic Performance", "Исходные данные", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("Aerodynamic Performance", "Построение графиков", None))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), _translate("Aerodynamic Performance", "Производные и средне интегральные АДХ", None))
        self.menuFile.setTitle(_translate("Aerodynamic Performance", "File", None))
        self.menuHelp.setTitle(_translate("Aerodynamic Performance", "Help", None))
        self.actionQuit.setText(_translate("Aerodynamic Performance", "Quit", None))
        self.actionQuit.setStatusTip(_translate("Aerodynamic Performance", "Выход", None))
        self.actionAbout.setText(_translate("Aerodynamic Performance", "About", None))
        self.actionAbout.setStatusTip(_translate("Aerodynamic Performance", "О программе", None))



    def aboutApp(self):
        website = "http://google.com"
        email = "[email protected]"
        license_link = "NA"
        license_name = "FREEWARE"
        msgBox = QtGui.QMessageBox()
        msgBox.setWindowTitle(self.tr("About ... "))
        msgBox.setTextFormat(QtCore.Qt.RichText)
        #msgBox.setIconPixmap(QtGui.QPixmap(ComicTaggerSettings.getGraphic('about.png')))
        msgBox.setWindowIcon(QtGui.QIcon('PNG/icon.ico'))  # иконка
        msgBox.setText("<br><br><br>" +
                       "&copy;2017 Petr Radchenko<br><br>" +
                       "<a href='{0}'>{0}</a><br><br>".format(website) +
                       "<a href='mailto:{0}'>{0}</a><br><br>".format(email) +
                       "License: <a href='{0}'>{1}</a>".format(license_link, license_name))
        msgBox.setStandardButtons(QtGui.QMessageBox.Ok)

        msgBox.exec_()

    def OpenFile(self):
        global filename
        filename = QtGui.QFileDialog.getOpenFileName(self, "Открыть файл", '/home')
        read_xls_file = xlrd.open_workbook(filename)
        sheet = read_xls_file.sheet_by_index(0)
        print('Загружен файл', filename)
        self.SelectValues_btn.setEnabled(True)

    def BlockSelection(self):
        pass



И Третий (дочернее диалоговое окно) selection_form.py

Код

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Selection_form.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_SelectDialog(object):
    def select_setupUi(self, SelectDialog):
        SelectDialog.setObjectName(_fromUtf8("SelectDialog"))
        SelectDialog.resize(955, 789)
        self.Selection_btnBox = QtGui.QDialogButtonBox(SelectDialog)
        self.Selection_btnBox.setGeometry(QtCore.QRect(590, 750, 341, 32))
        self.Selection_btnBox.setOrientation(QtCore.Qt.Horizontal)
        self.Selection_btnBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
        self.Selection_btnBox.setObjectName(_fromUtf8("Selection_btnBox"))
        self.checkBox_5 = QtGui.QCheckBox(SelectDialog)
        self.checkBox_5.setGeometry(QtCore.QRect(250, 80, 91, 17))
        self.checkBox_5.setObjectName(_fromUtf8("checkBox_5"))
        self.checkBox_6 = QtGui.QCheckBox(SelectDialog)
        self.checkBox_6.setGeometry(QtCore.QRect(150, 80, 91, 17))
        self.checkBox_6.setObjectName(_fromUtf8("checkBox_6"))
        self.checkBox_7 = QtGui.QCheckBox(SelectDialog)
        self.checkBox_7.setGeometry(QtCore.QRect(60, 80, 91, 17))
        self.checkBox_7.setObjectName(_fromUtf8("checkBox_7"))
        self.checkBox_8 = QtGui.QCheckBox(SelectDialog)
        self.checkBox_8.setGeometry(QtCore.QRect(250, 100, 91, 17))
        self.checkBox_8.setObjectName(_fromUtf8("checkBox_8"))
        self.checkBox_9 = QtGui.QCheckBox(SelectDialog)
        self.checkBox_9.setGeometry(QtCore.QRect(150, 100, 91, 17))
        self.checkBox_9.setObjectName(_fromUtf8("checkBox_9"))
...
#Очень много чекбоксов, сократил код...
...
        self.checkBox_162 = QtGui.QCheckBox(SelectDialog)
        self.checkBox_162.setGeometry(QtCore.QRect(470, 680, 101, 17))
        self.checkBox_162.setObjectName(_fromUtf8("checkBox_162"))
        self.label = QtGui.QLabel(SelectDialog)
        self.label.setGeometry(QtCore.QRect(380, 80, 281, 31))
        self.label.setObjectName(_fromUtf8("label"))
        self.checkBox = QtGui.QCheckBox(SelectDialog)
        self.checkBox.setGeometry(QtCore.QRect(60, 140, 91, 17))
        self.checkBox.setObjectName(_fromUtf8("checkBox"))
        self.checkBox_2 = QtGui.QCheckBox(SelectDialog)
        self.checkBox_2.setGeometry(QtCore.QRect(250, 140, 91, 17))
        self.checkBox_2.setObjectName(_fromUtf8("checkBox_2"))
        self.checkBox_3 = QtGui.QCheckBox(SelectDialog)
        self.checkBox_3.setGeometry(QtCore.QRect(150, 140, 91, 17))
        self.checkBox_3.setObjectName(_fromUtf8("checkBox_3"))

        self.retranslateUi(SelectDialog)
        QtCore.QObject.connect(self.Selection_btnBox, QtCore.SIGNAL(_fromUtf8("rejected()")), SelectDialog.reject)
        QtCore.QMetaObject.connectSlotsByName(SelectDialog)

    def retranslateUi(self, SelectDialog):
        SelectDialog.setWindowTitle(_translate("SelectDialog", "Выберите блоки значений", None))
        self.checkBox_5.setText(_translate("SelectDialog", "Cz (D-0 G-90)", None))
        self.checkBox_6.setText(_translate("SelectDialog", "Cz (D-0 G-45)", None))
        self.checkBox_7.setText(_translate("SelectDialog", "Cz (D-0 G-0)", None))
        self.checkBox_8.setText(_translate("SelectDialog", "Mx (D-0 G-90)", None))
        self.checkBox_9.setText(_translate("SelectDialog", "Mx (D-0 G-45)", None))


Помогите, пожалуйста, подключить вторую форму.
Эта тема, вероятно, не раз уже поднималась, по сему не серчайте и не кидайтесь в новичка туториалами. 
Заранее признателен за помощь.

UPDATE: вопрос решил сам, всем спасибо)

Это сообщение отредактировал(а) etopieto - 28.3.2017, 18:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Разработка GUI | Следующая тема »


 




[ Время генерации скрипта: 0.1082 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.