2014-01-28 4 views
1

Я пытаюсь вызвать другое окно с помощью кнопки click в python 2.7 с помощью PyQt4. Приведенный ниже код открывает диалоговое окно AddBooking, но сразу же закрывает его. Im новое для программирования Gui, может кто-нибудь, пожалуйста, скажите мне, что не так с моим кодом?Загрузите другие окна при нажатии кнопки. PyQt

from PyQt4 import QtGui 
from HomeScreen import Ui_HomeScreen 
from AddBooking import Ui_AddBooking 
import sys 

class HomeScreen(QtGui.QWidget, Ui_HomeScreen): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.setupUi(self) 
     self.show() 
     self.Add_Booking_Button.clicked.connect(self.handleButton) 

    def handleButton(self): 
     AddBooking2() 


class AddBooking2(QtGui.QWidget, Ui_AddBooking): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.setupUi(self) 
     self.show() 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    window = HomeScreen() 
    window.show() 
    sys.exit(app.exec_()) 

ответ

0

Не использовать мульти-наследование и ни вызова show функции внутри класса инициализаторе. Проблема в том, что объект, который вы создаете с AddBooking2(), является временным и автоматически уничтожается при завершении функции. Так что вам нужно использовать некоторые переменные для ссылки на этот объект что-то вроде:

addbooking = AddBooking2() 
addbooking.show() 

Кроме того, поскольку вы работаете с QtDesigner и pyuic4 инструментов вы можете сделать подключение немного проще. Говорит, что ваш код может быть изменен:

from PyQt4 import QtGui 
from PyQt4.QtCore import pyqtSlot 
from HomeScreen import Ui_HomeScreen 
from AddBooking import Ui_AddBooking 
import sys 

class HomeScreen(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_HomeScreen() 
     self.ui.setupUi(self) 

    @pyqtSlot("") 
    def on_Add_Booking_Button_clicked(self): # The connection is carried by the Ui_* classes generated by pyuic4 
     addbooking = AddBooking2() 
     addbooking.show() 


class AddBooking2(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_AddBooking() 
     self.ui.setupUi(self) 


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    window = HomeScreen() 
    window.show() 
    sys.exit(app.exec_()) 
0

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

Самый простой способ исправить это было бы сделать что-то вроде этого:

def handleButton(self): 
     self.dialog = AddBooking2() 
     self.dialog.show() 

, и вы также можете удалить self.show() строки из AddBooking2.__init__ и HomeScreen.__init__, которые являются избыточными. Кроме этого, ваш код выглядит отлично.

Смежные вопросы