trouble quitting PyQt4 App

Discussion in 'Python' started by Soumen banerjee, Sep 14, 2009.

  1. Hi,
    Im new to PyQt4 and im having fun using it. but ive run into a bit of
    a problem. I cant quit the application.
    The application has 2 modules. The gui module(gui.py) and then the
    main program(main.py)
    heres gui.py:

    from PyQt4 import QtCore, QtGui
    import sys
    from subprocess import Popen
    class Ui_MainWindow(object):
    fileinit=False
    paused=True
    quit=False
    filename=""
    def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(394, 414)
    self.centralwidget = QtGui.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.scrollArea = QtGui.QScrollArea(self.centralwidget)
    self.scrollArea.setGeometry(QtCore.QRect(19, 9, 361, 281))
    self.scrollArea.setWidgetResizable(True)
    self.scrollArea.setObjectName("scrollArea")
    self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea)
    self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0,
    0, 357, 277))
    self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
    self.textEdit = QtGui.QTextEdit(self.scrollAreaWidgetContents)
    self.textEdit.setGeometry(QtCore.QRect(-7, -6, 371, 291))
    self.textEdit.setObjectName("textEdit")
    self.scrollArea.setWidget(self.scrollAreaWidgetContents)
    self.pushButton = QtGui.QPushButton(self.centralwidget)
    self.pushButton.setGeometry(QtCore.QRect(30, 310, 80, 25))
    self.pushButton.setObjectName("pushButton")
    self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
    self.pushButton_2.setGeometry(QtCore.QRect(139, 310, 91, 25))
    self.pushButton_2.setObjectName("pushButton_2")
    self.pushButton_3 = QtGui.QPushButton(self.centralwidget)
    self.pushButton_3.setGeometry(QtCore.QRect(280, 310, 80, 25))
    self.pushButton_3.setObjectName("pushButton_3")
    MainWindow.setCentralWidget(self.centralwidget)
    self.menubar = QtGui.QMenuBar(MainWindow)
    self.menubar.setGeometry(QtCore.QRect(0, 0, 394, 23))
    self.menubar.setObjectName("menubar")
    MainWindow.setMenuBar(self.menubar)
    self.statusbar = QtGui.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(MainWindow)
    QtCore.QObject.connect(self.pushButton,
    QtCore.SIGNAL("clicked()"), self.Open)
    QtCore.QObject.connect(self.pushButton_2,
    QtCore.SIGNAL("clicked()"), self.Pause)
    QtCore.QObject.connect(self.pushButton_3,
    QtCore.SIGNAL("clicked()"), self.Quit)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
    MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow",
    "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton.setText(QtGui.QApplication.translate("MainWindow",
    "Open", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton_2.setText(QtGui.QApplication.translate("MainWindow",
    "Pause/Resume", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton_3.setText(QtGui.QApplication.translate("MainWindow",
    "Quit", None, QtGui.QApplication.UnicodeUTF8))
    def Pause(self):
    print "Pause"
    self.paused=not(self.paused)
    def Quit(self):
    self.quit=True
    print "setting quit"
    def Open(self):
    print "Open"
    self.filename=QtGui.QFileDialog.getOpenFileName()
    self.filename=str(self.filename)
    f=open("book.txt","r")
    old=f.read(20)
    f.close()
    f=open(self.filename,'r')
    new=f.read(20)
    f.close()
    if(old!=new):
    Popen('rm log.txt',shell=True)
    f=open("book.txt",'w')
    f.write(new)
    f.close()
    self.fileinit=True
    print "setting fileinit"


    and heres the main.py

    from PyQt4 import QtCore, QtGui
    import sip,gui
    import sys
    from subprocess import Popen
    from threading import Thread
    class AppThread(Thread):
    appinit=False
    def run(self):
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    self.ui = gui.Ui_MainWindow()
    self.ui.setupUi(MainWindow)
    MainWindow.show()
    self.appinit=True
    #ui.textEdit.setText(ui.filename)
    sys.exit(app.exec_())
    class Speak(Thread):
    def run(self):
    print "starting speaker"
    try:
    log=open("log.txt",'r')
    print log
    self.index=log.read()
    log.close()
    self.index=int(self.index)
    except IOError:
    print "setting new"
    index=0
    #by now, index has been defined for both a new and an old book
    self.book=open(a.ui.filename,'r')
    self.book.seek(self.index)
    while(a.ui.quit==False):
    if (a.ui.paused==False):
    sen=self.readsen()
    print sen
    #a.ui.textEdit.setText(sen)
    command="soundwrapper espeak "+' " '+sen+' " '
    k=Popen(command,shell=True)
    print "read sentence"
    k.wait()
    print "quitted loop"
    index=self.book.tell()
    log=open("log.txt","w")
    log.write(str(index))
    log.close()
    print "calling exit"
    sys.exit()
    def readsen(self):
    line=""
    sen=""
    while(line.find(".")== -1):
    sen=sen+line
    line=self.book.readline()
    sen=sen+line[0:line.find(".")+1]
    self.book.seek(self.book.tell()-len(line)+line.find(".")+1)
    return sen
    a=AppThread()
    a.start()
    while 1:
    if a.appinit== True:
    if a.ui.fileinit==True:
    s=Speak()
    s.start()
    break

    so heres the problem:- when i hit the quit button, quit is set to high
    (in the Gui module) and then the while loop in the speak thread
    quits(printing quitting loop) and it updates the log file as its
    supposed to do. then after it prints calling exit, the app freezes.
    Isnt sys.exit() supposed to kill the interpreter? So, what is going
    on? why does the app not quit?
    Pls Help
    Regards
    Soumen
    Soumen banerjee, Sep 14, 2009
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Gitte Wange

    Timer hangs when quitting app

    Gitte Wange, Nov 28, 2004, in forum: Python
    Replies:
    1
    Views:
    272
    Peter Hansen
    Nov 28, 2004
  2. Replies:
    8
    Views:
    297
    Dennis Lee Bieber
    Sep 6, 2005
  3. Peter Kleiweg
    Replies:
    3
    Views:
    473
  4. Chris
    Replies:
    4
    Views:
    353
    Charles Sanders
    Apr 19, 2007
  5. wgw
    Replies:
    1
    Views:
    455
Loading...

Share This Page