我有一个应用程序,每当有新的rss订阅可用时,它会弹出一个通知对话框到所有窗口的前面。用户可以运行多个应用程序实例,但我只想弹出一个通知对话框。有什么想法可以实现这一点吗?谢谢。
您可以简单地放置一个锁文件来指示另一个进程正在显示对话框,并在显示另一个对话框之前检查它是否存在。
更复杂的方法是使用QSharedMemory
来同步您的访问。我曾在类似情况下使用上下文管理器做过类似的事情,但对于这种情况,它可能看起来像:
from PyQt4.QtGui import QApplication, QMessageBox
from PyQt4.QtCore import QSharedMemory
class MemoryCondition:
def __init__(self, key='memory_condition_key'):
self._shm = QSharedMemory(key)
if not self._shm.attach():
if not self._shm.create(1):
raise RuntimeError('error creating shared memory: %s' %
self._shm.errorString())
self.condition = False
def __enter__(self):
self._shm.lock()
if self._shm.data()[0] == b'\x00':
self.condition = True
self._shm.data()[0] = b'\x01'
self._shm.unlock()
return self.condition
def __exit__(self, exc_type, exc_value, traceback):
if self.condition:
self._shm.lock()
self._shm.data()[0] = b'\x00'
self._shm.unlock()
# usage example:
app = QApplication([])
with MemoryCondition() as condition:
if condition:
mb = QMessageBox()
mb.setText("you'll only see one of me")
mb.exec_()
else:
print("other process is doing it's stuff")
int(sip.voidptr)
返回它的地址,所以很容易,我在这里粘贴了一个修改过的版本链接。 - mata