我已经编写了一个程序,它监视一个目录,并在用户添加文件时发出警报,该文件的特定格式为用户名。文件它工作正常,但当我在收到新文件被添加的警报时按ok,程序退出,我希望它保持运行。
下面我写的代码将作为该应用程序中另一个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()
我不能给你一个非常满意的答案,但希望这会有所帮助。
首先,您提供的代码示例没有在QMainWindow
上调用show()
。
然后,在没有显示主窗口的情况下创建QMessageBox
似乎会在关闭QMessageBox
后导致Qt事件循环(由app.exec()启动)停止。因此,按如下方式修改代码将导致应用程序按预期运行:
window = SendMyfiles()
window.show()
app.exec_()
然而,我无法解释的是为什么事件循环是由
app启动的。当QMessageBox的事件循环结束时,exec()将结束。
。如果有人有洞察力,我很想知道为什么会发生这种情况!
嗯,你可以在这里找到yopur的答案,我猜你是说当你运行python文件时Windows为你打开的终端关闭得太快了。您可以在程序退出之前添加raw\u输入(“按Enter键退出”)
。它告诉Python在退出之前等待输入,请检查这里。
很抱歉,我无法复制这个(OpenSUSE 12.3 x64,PyQt 4.9.6)。
我接受了你的代码,并添加了一行window.show()
到main()
(尽管你的评论说你在做window.show()
)。我还换了线
userRecvdFrom = newUsrFile(".")[0]
具有
userRecvdFrom = newUsrFile.split(".")[0]
前者给出了一个运行时错误,因为newUsrFile
是一个字符串,您不能调用它。我还改变了正在观看的目录,因为我的机器上没有这个名字的目录。
完成此操作后,我可以在正在监视的文件夹中可靠地创建文件,并让程序弹出警报框。每次警报解除后,程序都保持运行。
所以我只能推测问题可能是什么。您说您正在实例化SendMyfiles
,在您选择不与我们共享的代码中,但是这个对象存在多长时间?您是保留对该对象的引用,还是只将其存储在局部变量中,从而在方法末尾收集垃圾?如果您有一个PyQt窗口对象,并且对它的所有引用都丢失了,Python将对其进行垃圾收集,这将导致删除底层Qt C对象并关闭窗口。
在Flutter中,当使用< code>showDatePicker时,为什么不立即接受按下的日期值(不必按OK)? 例如,如果小部件最初在2019年9月10日打开,我想选择2019年10月5日,我希望将月份切换到10月,然后从日历显示中按5,日历显示将自动接受日期为2019年十月5日,而无需按OK按钮。 有没有办法避免按下OK按钮?
我试图建立一个视频播放Android应用程序使用Kotlin。我遵循了以下教程https://www.raywenderlich.com/14273655-mediaplayer-simplifed-video-playback-on-Android 我的视频可以播放,但当我退出应用程序并重新进入它,或关闭屏幕并再次打开时,视频图像会变成黑色,尽管音频仍在播放。 我尝试使用onRestart()、
问题内容: 我正在使用pushState为网站上的Ajax内容创建有意义的URL。我想在用户单击前进或后退按钮时刷新Ajax内容。但是我遇到了问题,因为Chrome(正确)在“历史记录遍历”(前进/后退按钮)和“结束”(页面加载)上都暗示了onpopstate。我想创建一个区分页面加载和历史遍历的onpopstate处理程序,因为如果已经成功加载Ajax内容,我就不希望刷新它。有人可以帮助我区分两
问题内容: 我正在尝试使用Swift的内部后退按钮图像。我之前已经问过这个问题,并且得到了从上一个View继承过来的技术上正确的答案,但是如果我插入此代码,则可以控制当前View的后退按钮。 这给了我<,“ ABC”会给我ABC等,但是如何触发Swift来放置它的内部“后退按钮”图像。下面的代码不起作用,但我认为正确的做法是正确的。 有没有人知道如何做到这一点? 问题答案: 尝试将自定义视图添加为
在活动A中,我可以查看。我在活动A中按下了一个编辑按钮,它启动活动B(并关闭A)。在代码中,我将带有意图的字符串从A传递到B,如下所示: 在活动A中,我有: 但是文本框是空的。 你能告诉我该如何把值从B传递回A吗?
我有一个服务和一个交流的活动。当我点击按钮(我有galaxy s3,只有一个按钮)时,我的活动当然不满意,我的服务继续运行,但如果我点击后退(触摸)按钮,那么我的服务就被破坏了。我该如何改变这一点?我希望服务一直运行,直到活动破坏它。 活动: