我写了一个程序,它监视一个目录,当用户添加一个文件时发出警报,该文件具有特定的格式-name.files文件它工作正常,但当我按确定的新文件被添加,程序退出收到警报,我希望它继续运行。你知道吗
我编写的以下代码将作为该应用程序中另一个PYQT应用程序的子进程运行。因此,我将不执行main(),而只是实例化SendMyFiles对象。你知道吗
from PyQt4 import QtGui,QtCore
from PyQt4.QtCore import pyqtSlot
import sys
import os
class SendMyfiles(QtGui.QMainWindow):
def __init__(self):
super(SendMyfiles, self).__init__()
self._lookInPath = "/Users/krystosan"
self.filesList = os.listdir(self._lookInPath)
print self.filesList
self.watchMyfilesBin()
def watchMyfilesBin(self):
self.fileSysWatcher = QtCore.QFileSystemWatcher()
self.fileSysWatcher.addPath(self._lookInPath)
QtCore.QObject.connect(self.fileSysWatcher,QtCore.SIGNAL("directoryChanged(QString)"), self,
QtCore.SLOT("slotDirChanged(QString)"))
# get list of files as files
self.newFilesList = os.listdir(self._lookInPath)
def _connections(self):
pass
def recievedfilesFromUser(self):
newUsrFile = list(set(os.listdir(self._lookInPath))^set(self.filesList))[0]
userRecvdFrom = newUsrFile.split(".")[0]
self.filesList.append(newUsrFile)
return userRecvdFrom
@pyqtSlot("QString")
def slotDirChanged(self, userfiles):
userName = self.recievedfilesFromUser()
retVal = QtGui.QMessageBox.about(self, "Hello %s" % os.getenv('USER'), "Recieved files from %s." % userName)
def main():
app = QtGui.QApplication(sys.argv)
fileSysWatcher = QtCore.QFileSystemWatcher()
window = SendMyfiles()
app.exec_()
if __name__ == '__main__':
main()
嗯,你可以在here的副注上找到尤普尔的答案 我猜你的意思是当你运行python文件时Windows为你打开的终端关闭得太快了。您可以在程序退出之前添加
raw_input('Press Enter to exit')
。它告诉Python在退出之前等待输入,请同时检查here。你知道吗抱歉,我无法复制这个(OpenSUSE 12.3 x64,PyQt 4.9.6)。你知道吗
我接受了您的代码并在
window.show()
到main()
中添加了一行代码(尽管您的评论说您在“做window.show()
”)。我也换了线与
前者给出一个运行时错误,因为
newUsrFile
是一个字符串,您不能调用它。我还更改了正在监视的目录,因为我的计算机上没有同名的目录。你知道吗完成此操作后,我可以可靠地在被监视的文件夹中创建文件,并让程序弹出警报框。每次警报解除后,程序都保持运行。你知道吗
所以我只能推测问题出在哪里。你说你正在实例化
SendMyfiles
,在你选择不与我们共享的代码中,但是这个对象存在了多长时间?您是保留对这个对象的引用,还是它只存储在局部变量中,因此在方法的末尾被垃圾收集?如果您有PyQT窗口对象,并且所有引用都丢失了,Python将垃圾收集它,这将导致基础QtC++对象被删除,窗口关闭。你知道吗嗯,我不能给你一个非常满意的答案,但希望这会有所帮助。你知道吗
首先,您提供的代码示例不调用
QMainWindow
上的show()
。你知道吗然后,在没有显示主窗口的情况下创建
QMessageBox
会导致Qt事件循环(由app.exec_()
启动)在QMessageBox
关闭后停止。因此,按以下方式修改代码将导致应用程序按预期运行:但是,我无法解释的是,当QMessageBox的事件循环结束时,
app.exec_()
启动的事件循环为什么会结束。如果有人有见识,我很想知道为什么会这样!你知道吗相关问题 更多 >
编程相关推荐