[PyQt] A Hopefully Silly Question from a Beginner
Ryan Hanson
crossrocker at gmail.com
Mon Sep 16 18:34:52 BST 2013
On Mon, Sep 16, 2013 at 12:18 PM, Patrick Barrett <patrick at mkii.org> wrote:
> On 09/16/2013 10:58 AM, Ryan Hanson wrote:
>
> On Mon, Sep 16, 2013 at 10:19 AM, Patrick Barrett <patrick at mkii.org>wrote:
>
>> I'm trying to write a small app the generates a few QWebView windows and
>> then rotates the page that is displayed on a set interval.
>>
>> Code: https://gist.github.com/Azdle/6556433
>>
>> I've run into an issue that I don't understand. When I try to generate a
>> `PageWindow` (Class based on QWebView) from within my `MainWindow` class
>> nothing appears. (See the code in 29-30) However, when I copy and paste
>> that code outside of any classes the window appears as it should. (See the
>> commented code in 56-57)
>>
>> Even when I can make the QWebView window appear, the QTimer object that I
>> create in the `PageWindow` never seems to timeout. I think this is being
>> caused by the same issue as the first problem.
>>
>> I'm not sure if the issues are me doing the python wrong or just not
>> understanding something about how the Qt-specfic aspects work. I have this
>> application already working in C++, but want to get it working in Python.
>>
>> Thanks
>> --Patrick
>>
>>
> Here you go Patrick, you want to move your timer into your main class
> and then call your new page function on the instance of PageWindow that you
> create inside that class.
>
> import sys
> from PyQt4.QtCore import *
> from PyQt4.QtGui import *
> from PyQt4.QtWebKit import *
>
> pages = [
> "https://portals.exosite.com/views/3819798770/3579834479",
> "https://portals.exosite.com/views/2562112089/4128069106",
> "https://portals.exosite.com/views/2060811893/1760385000",
> "https://exosite:AKYQhkDqj4@logs.exosite.com:444"
> ]
>
> class MainWindow(QMainWindow):
>
> def __init__(self, *args):
> QMainWindow.__init__(self)
>
> self.quitButton = QPushButton("Quit")
> vbox = QVBoxLayout()
> vbox.addWidget(self.quitButton)
> centralWidget = QWidget()
> centralWidget.setLayout(vbox)
> self.setCentralWidget(centralWidget)
>
> self.quitButton.clicked.connect(self.close)
>
> self.pageView = PageWindow()
> self.pageView.show()
>
> self.pageTimer = QTimer()
> self.pageTimer.timeout.connect(self.pageView.nextPage)
> self.pageTimer.start(5000)
>
> def closeEvent(self, event):
> self.pageTimer.stop()
> self.pageView.close()
> event.accept()
>
> class PageWindow(QWebView):
> def __init__(self):
> QWebView.__init__(self)
>
> self.pageIndex = 0
> self.nextPage()
> self.setGeometry(QApplication.desktop().screenGeometry(1))
> self.showFullScreen()
>
> def nextPage(self):
> print("Loading:"+pages[self.pageIndex])
> self.load(QUrl(pages[self.pageIndex]))
> self.pageIndex = self.pageIndex + 1
> if self.pageIndex >= len(pages):
> self.pageIndex = 0
>
> def main(args):
> app = QApplication(args)
> win = MainWindow()
> win.show()
> app.connect(app, SIGNAL("lastWindowClosed()"),
> app, SLOT("quit()"))
> app.exec_()
>
> if __name__=="__main__":
> main(sys.argv)
>
>
> Thanks Ryan. I ended up moving the timer object back into the `PageWindow`
> class.
>
> Added a new revision to the old Gist:
> https://gist.github.com/Azdle/6556433
>
> I see from your code that my issue was that I was putting object in local
> scope instead of putting them in the object (using var instead of self.var,
> my terminology is probably wrong) so the objects were getting garbage
> collected right after getting created.
>
> Thanks for your help!
>
> --Patrick
>
Glad you got it working
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20130916/48931d52/attachment-0001.html>
More information about the PyQt
mailing list