Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » QCoreApplication::exec: The event loop is already running [RSS Feed]

#1 Фев. 21, 2010 17:21:23

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

QCoreApplication::exec: The event loop is already running

создал два класса-короче две формы,на первой есть кнопка и когда я нажимаю ее должна открыться вторая форма а первая закрыться, в первом классе написал метод для кнопки(которая открывает вторую форму) и когда я нажимаю ее вылазит ошибка: QCoreApplication::exec: The event loop is already running.
На вашем форуме нашел по этой ошибке следующее: http://python.su/forum/viewtopic.php?id=5754
но это мне не помогло, в чем может быть причина?



Офлайн

#2 Фев. 21, 2010 21:47:21

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

QCoreApplication::exec: The event loop is already running

покажи код



Офлайн

#3 Фев. 21, 2010 23:38:45

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

QCoreApplication::exec: The event loop is already running

bazooka
покажи код
короче смысл такой: У меня есть одна форма-вход в систему,другая просто тупа форма)))и не могу понять как открыть вторую форму и закрыть при этом первую чтобы все работало.
код для формы вход в систему:
#!usr/bin/python
#-*-coding:utf-8-*-
import sys
from PyQt4 import QtCore,QtGui
from Form_mainwindow import Form_mainwindow
class Form_enter_in_system(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)

self.setGeometry(450,350,237,110)
self.setFixedSize(237,110)
self.setWindowIcon(QtGui.QIcon(“logo\enter.png”))
self.setWindowTitle(“Вход в систему”)

self.font_text=QtGui.QFont(self)
self.font_text.setPointSize(11)
self.font_text.setFamily(“Arial”)

self.font_help=QtGui.QFont(self)
self.font_help.setPointSize(10)
self.font_help.setFamily(“Times New Roman”)

self.labels_widget=QtGui.QWidget(self)
self.labels_widget.setGeometry(0,0,75,90)
self.vertical_labels=QtGui.QVBoxLayout(self.labels_widget)

self.label_login=QtGui.QLabel(self)
self.label_login.setText(“Логин”)
self.label_login.setFont(self.font_text)

self.label_password=QtGui.QLabel(self)
self.label_password.setText(“Пароль”)
self.label_password.setFont(self.font_text)

self.vertical_labels.addWidget(self.label_login)
self.vertical_labels.addWidget(self.label_password)

self.edits_widget=QtGui.QWidget(self)
self.edits_widget.setGeometry(60,0,181,90)
self.vertical_edits=QtGui.QVBoxLayout(self.edits_widget)

self.edit_login=QtGui.QLineEdit(self)
self.edit_login.setMaxLength(20)
self.edit_login.setToolTip(“Допустимо максимум 20 символов”)
QtGui.QToolTip.setFont(self.font_help)

self.edit_password=QtGui.QLineEdit(self)
self.edit_password.setEchoMode(QtGui.QLineEdit.Password)
self.edit_password.setMaxLength(20)
self.edit_password.setToolTip(“Допустимо максимум 20 символов”)
QtGui.QToolTip.setFont(self.font_help)

self.vertical_edits.addWidget(self.edit_login)
self.vertical_edits.addWidget(self.edit_password)

self.buttons_widget=QtGui.QWidget(self)
self.buttons_widget.setGeometry(60,70,181,46)
self.horizontal_buttons=QtGui.QHBoxLayout(self.buttons_widget)

self.button_enter=QtGui.QPushButton(“Войти”,self)

self.button_exit=QtGui.QPushButton(“Выйти”,self)

self.horizontal_buttons.addWidget(self.button_enter)
self.horizontal_buttons.addWidget(self.button_exit)

self.connect(self.button_exit,QtCore.SIGNAL(“clicked()”),sys.exit)
self.connect(self.button_enter,QtCore.SIGNAL(“clicked()”),self.proverka)

def proverka(self):
text_login=self.edit_login.text()
text_password=self.edit_password.text()
if text_login==“admin” and text_password==“admin”:
#ну здесь я думаю закрываю приложение где первая форма,НО я не уверен и надо ли это вообще)))
app_form_enter_in_system.exit()
#здесь действую по аналогии с тем моментом,когда создавал первую форму и создаю вторую,Но я не знаю правильно ли
app_mainwindow=QtGui.QApplication(sys.argv)
my_mainwindow=Form_mainwindow()
my_mainwindow.show()
sys.exit(app_mainwindow.exec_())
else:
self.error_massege()

def error_massege(self):
QtGui.QMessageBox.question(self, “Ошибка”, “Вы неправильно ввели логин или пароль.Чтобы попробывать снова нажмите кнопку ОК.”, QtGui.QMessageBox.Ok,)
if QtGui.QMessageBox.Ok:
QtGui.QMessageBox.Close

#создаю объект Qt-приложения и передаю его конструктору параметры командной строки
app_form_enter_in_system=QtGui.QApplication(sys.argv)
#создаю объект своего созданного класса
my_form_enter_in_system=Form_enter_in_system()
#показываю свою формочку
my_form_enter_in_system.show()
#апускаем цикл обработки событий
sys.exit(app_form_enter_in_system.exec_())

код второй формы:
#!usr/bin/python
#-*-coding:utf-8-*-
import sys
from PyQt4 import QtGui,QtCore

class Form_mainwindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)

self.setGeometry(450,350,500,500)
self.setWindowIcon(QtGui.QIcon(“logo/main”))
self.setWindowTitle(“Магазин автозапчастей”)

И в общем я рассуждал так что когда я создаю первую форму и запускаю для неё цикл обработки событий: sys.exit(app_form_enter_in_system.exec_())
то когда я закрою эту форму то цикл завершится и я смогу создать по аналогии вторую форму и уже для неё запустить свой такой же цикл. Но когда я это делаю ошибка вроде как говорит что этот цикл уже запущен.Ну в общем мои рассуждения ты наверное понял)))(вполне возможно что это полный бред).
Короче я недели две на питоне))так что не суди меня строго,и помоги мне пожалуйста разобраться как делаются подобные вещи.
Может я даже не правильно понял,просто примера хорошего не нашел,где бы показывалась ситуация при переходе от одной формы к другой при нажатии кнопки.

Буду тебе очень благодарен.



Офлайн

#4 Фев. 22, 2010 00:29:54

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

QCoreApplication::exec: The event loop is already running

цикл обработки событий запускаеш не для формы а для проги.

#показываю свою формочку
my_form_enter_in_system.show()
точно также как ты показываеш сво формочку до запуска цикла можно показывать ее и во время работы программы, а с помощью метода hide() и прятать, т.е. тебе надо просто спрятать 1ю форму и показать вторую



Офлайн

#5 Фев. 22, 2010 11:08:46

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

QCoreApplication::exec: The event loop is already running

bazooka
цикл обработки событий запускаеш не для формы а для проги.
#показываю свою формочку
my_form_enter_in_system.show()
точно также как ты показываеш сво формочку до запуска цикла можно показывать ее и во время работы программы, а с помощью метода hide() и прятать, т.е. тебе надо просто спрятать 1ю форму и показать вторую
Спасибо огромное! я в пинципе думал что то типа того,только не знал как это сделать.
У меня еще такой вопрос: если я тебя правильно понял,то вот эта строчка:
sys.exit(app_form_enter_in_system.exec_())
должна создаваться только один раз и будет обрабатывать все события для каждой формы,в программе?
И вопрос по поводу этой строчки:
app_form_enter_in_system=QtGui.QApplication(sys.argv)
ее мы тоже должны создавать только раз в программе(это мы создаем как раз наше все приложение)? или она должна писаться каждый раз перед созданием новой формы?
Переписал вот так как ты посоветовал:

def proverka(self):
text_login=self.edit_login.text()
text_password=self.edit_password.text()
if text_login==“” and text_password==“”:
#прячу первую форму
my_form_enter_in_system.hide()
#создаю объект моего второго класса
my_mainwindow=Form_mainwindow()
#показываю мою вторую форму
my_mainwindow.show()
else:
self.error_massege()

Но теперь первая форма успешна закрывается а вторая появляется и исчезает,как будто нету цикла обработки событий,так что же делать?Значит цикл обработки который якобы как ты говоришь для всего приложения,вроде бы реагирует на события которые происходят только на первой форме,поэтому вторая форма сразу закрывается.
Как сделать так чтобы вторая форма не закрывалась сразу?и для нее тоже работал цикл обработки событий?
Просто я говорю маленько не понял на счет тех двух строк,о которых я спрашивал тебя выше.

Буду очень благодарен за разъяснение и помощь!



Офлайн

#6 Фев. 22, 2010 11:13:16

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

QCoreApplication::exec: The event loop is already running

sys.exit(app_form_enter_in_system.exec_())
эта строка вернет в систему результат который возвратит твое окно.



Офлайн

#7 Фев. 22, 2010 11:16:58

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

QCoreApplication::exec: The event loop is already running

truporez
эта строка вернет в систему результат который возвратит твое окно.
да не окно а программа, хоть без окон вапще хоть 15 окон



Офлайн

#8 Фев. 22, 2010 11:20:30

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

QCoreApplication::exec: The event loop is already running

truporez
sys.exit(app_form_enter_in_system.exec_())
эта строка вернет в систему результат который возвратит твое окно.
Простите за мой тупизм и мое непонимание) так как сделать так что бы вторая форма не закрывалась?



Офлайн

#9 Фев. 22, 2010 11:49:21

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

QCoreApplication::exec: The event loop is already running

ааааааааааа все разобрался))))
Спасибо всем кто советовал и помогал,особенно базука!



Отредактировано (Фев. 22, 2010 11:50:13)

Офлайн

#10 Фев. 22, 2010 11:52:58

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

QCoreApplication::exec: The event loop is already running

my_mainwindow=Form_mainwindow()
#показываю мою вторую форму
my_mainwindow.show()
ты создаеш экземпляр формы в функции и по окончании функции переменная уничтожается



Офлайн

  • Начало
  • » GUI
  • » QCoreApplication::exec: The event loop is already running[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version