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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> pyqt, вызов класса 
:(
    Опции темы
Securelord
Дата 19.1.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Первый раз столкнулся с pyQT... Задача состоит вот в чем: скрипт запуска импортирует класс form1 (отрисовывается окно с кнопкой), нужно при нажатии на кнопку отрисовать(в классе form1 при  нажатии на кнопку выполняется функция Conf_Connection, которая по моему разумению должна выполнить класс form2) окно, описаное в классе form2. Код что я привел ниже не работает... а точнее при закрытии второго окна, описаного в классе form2 закрывается все, а это не желательно. Подскажите новичку....

Скрипт запуска
Код

import sys
from form1 import *

app=QApplication(sys.argv)
QObject.connect(app,SIGNAL("lastWindowClosed()"),app,SLOT("quit()"))
Form=Form1()
app.setMainWidget(Form)
Form.show()
app.exec_loop()



Класс form1

Код

# -*- coding: utf-8 -*-
from qt import *
import sys
from form2 import *

class Form1(QMainWindow):

    def Conf_Connection(self):

        con = QApplication(sys.argv)
        w = Form2()
        con.setMainWidget(w)
        w.show()
        con.exec_loop()

    def __init__(self,parent = None,name = None,fl = 0):
        QMainWindow.__init__(self,parent,name,fl)
        self.statusBar()

        if not name:
            self.setName("Form1")


        self.setCentralWidget(QWidget(self,"qt_central_widget"))

        self.pushButton1 = QPushButton(self.centralWidget(),"pushButton1")
        self.pushButton1.setGeometry(QRect(220,169,104,24))



        self.languageChange()

        self.resize(QSize(600,480).expandedTo(self.minimumSizeHint()))
        self.clearWState(Qt.WState_Polished)
    
    self.connect(self.Connect_Conf_But,SIGNAL("clicked()"),self.Conf_Connection)

    def languageChange(self):
        self.setCaption(self.__tr("Form1"))
        self.pushButton1.setText(self.__tr("pushButton1"))


    def __tr(self,s,c = None):
        return qApp.translate("Form1",s,c)




Класс form2

Код

# -*- coding: utf-8 -*-
from qt import *

class Form2(QWidget):
    def __init__(self,parent = None,name = None,fl = 0):
        QWidget.__init__(self,parent,name,fl)

        if not name:
            self.setName("Form1")



        self.pushButton1 = QPushButton(self,"pushButton1")
        self.pushButton1.setGeometry(QRect(210,190,104,24))

        self.languageChange()

        self.resize(QSize(600,480).expandedTo(self.minimumSizeHint()))
        self.clearWState(Qt.WState_Polished)


    def languageChange(self):
        self.setCaption(self.__tr("Form1"))
        self.pushButton1.setText(self.__tr("pushButton1"))


    def __tr(self,s,c = None):
        return qApp.translate("Form1",s,c)






Это сообщение отредактировал(а) Securelord - 19.1.2007, 16:03
PM MAIL   Вверх
Artemios
Дата 20.1.2007, 05:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

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



10-14 строки в описании класса Form1:
Код

        con = QApplication(sys.argv) # <- это
        w = Form2()
        con.setMainWidget(w) # <- это
        w.show()
        con.exec_loop() # <- это


Удали выделенные мной места. Также недостает отступа в 36 строке в описании класса Form1.

Дело в том, что объект класса QApplication -- это объект-одиночка в рамках одного приложения.

Как я понял, используешь Qt 3-й версии. Элементарный пример, как по нажатию кнопки одного окна создать другое (только классы для разных окон я не стал разносить по разным модулям):

Код

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
from qt import *

class Form2(QWidget):
      pass

class Form1(QWidget):
      def slot_buttonclick(self):
          self.form2 = Form2()
          self.form2.show()

      def __init__(self):
          QWidget.__init__(self)
          self.button = QPushButton(self)
          self.connect(self.button,SIGNAL("clicked()"),self.slot_buttonclick)

def main(args):
    app = QApplication(args)
    form1 = Form1()
    form1.show()
    app.setMainWidget(form1)
    app.exec_loop()

if __name__ == '__main__':
    main(sys.argv)




--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




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


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

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