On Wednesday 26 October 2011 11:58:14 Pepijn de Vos wrote: > Hi, > > I'm trying to get started with PySide, after some hacking on > https://bitbucket.org/3david/qtodotxt > > disclaimer: I'm a little frustrated, but I mean well. > > I read about the model-view architecture, so I want to start by developing > my model, which would update itself with a QFileSystemWatcher. > > The event loop is severely interfering with my development process. Before > I start it, nothing works, after I start it, I can't use the REPL anymore. > > My very modest goal for today was to test QFileSystemWatcher, because in my > hacking on QTodoTxt, it only notified once and then crashed. It's telling > that watching files has its own module on the Qt bug tracker. > > Simple, right? > > 1. open a file > 2. set up a watcher > 2. register a handler > 3. write to the file > > But... the watcher only runs when I start the event loop. How would I write > to a file after that? > > Best would be to run the event loop in the background, or have a REPL that > runs on the event loop. Couldn't find how to do it. > > Second alternative would be to set up a Signal to invoke the write from the > event loop. How? How about... > > s = Signal() > s.connect(write) > s.emit() > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > AttributeError: 'PySide.QtCore.Signal' object has no attribute 'emit'
Hi
Here is the code to do this:
from PySide.QtCore import *
import tempfile
import sys
def onFileChanged(path):
print("%s was changed!" % path)
QCoreApplication.instance().quit()
def writeOnMyFile():
global file
print("Writing on %s." % file.name)
file.write("Hello World\n")
# The file will not be modified until you call flush, close the file or
write contents enough.
file.flush()
app = QCoreApplication(sys.argv)
file = tempfile.NamedTemporaryFile()
watcher = QFileSystemWatcher()
watcher.addPath(file.name)
watcher.fileChanged.connect(onFileChanged)
QTimer.singleShot(0, writeOnMyFile)
sys.exit(app.exec_())
Regards
> You don't expect me to set up a push button to fire the event, right?
>
> Okay, then maybe there is a test framework for PySide that understand the
> event loop, like in Twisted. Maybe? Searching for it turned up nothing,
> but at last I found
> http://www.pyside.org/docs/pyside/PySide/QtTest/QTest.html No idea how to
> use it though.
>
> I'm sure this is all very simple to you, but I've been trying for hours to
> do something simple, like testing a file watcher.
>
> Pepijn
--
Hugo Parente Lima
INdT - Instituto Nokia de Tecnologia
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ PySide mailing list [email protected] http://lists.pyside.org/listinfo/pyside
