同步消息框

2024-04-24 03:16:59 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我创建了一个事件驱动程序,当特定的事件处理程序通过消息对话框触发时,它应该会提示用户。如果这些消息对话框同时出现,有什么方法可以同时实例化它们吗?你知道吗

################################################################################
# Create Listener ##############################################################
################################################################################

# listens to a local directory for files

watch = Watcher(LOCAL_DIRECTORY, callback)

# set the appropriate flags for a listener

watch.flags = FILE_NOTIFY_CHANGE_FILE_NAME

################################################################################
# Start Listener ###############################################################
################################################################################

watch.start()

################################################################################
################################################################################
################################################################################

Tags: 实例方法用户消息处理程序forcreate驱动程序
1条回答
网友
1楼 · 发布于 2024-04-24 03:16:59

它应该只是工作,考虑以下几点

import wx

def handle(e):
    wx.MessageBox("Hello","world")

a = wx.App(redirect=False)
t = wx.Timer()
t.Bind(wx.EVT_TIMER,handle)
t.Start(3000)
f = wx.Frame(None)
a.MainLoop()

这将每3秒打开一次消息框,而不管前一个消息框是否打开。。。你知道吗

[编辑]

经过进一步的讨论,我将作出一个假设,你的事件是一个你必须投票。。。您应该将轮询逻辑放在它自己的线程中

def poll_data(data_callback):
    def check_new_event():
        if do_something_to_check():
           wx.CallAfter(data_callback) # this will cause the callback to be executed in the main thread (All gui updates *should* be done in the main thread)
    while True:
       check_new_event()
       sleep(1) # force thread to surrender control for a while

def on_callback(*args,**kwargs):
    wx.MessageBox("Some Message","Title")

def my_app():
    a= wx.App(redirect=False)
    f=wx.Frame(None)
    th = threading.Thread(target=poll_data,args=(on_callback,))
    th.start()
    a.MainLoop()

[编辑2]

在您的编辑之后,我将做另一个假设,您的watch库阻塞,直到回调返回。。。只需使用wx.Callafter,如下所示

def old_callback(*args):
    wx.MessageBox("Whatever","blah")
def callback(*args):
    wx.CallAfter(old_callback,*args)

watch.bind(callback) # or however

这允许回调返回并监视以继续侦听。。。不管阻塞对话框是什么

[编辑3]

下面是一个使用watch库的完整示例

import watcher,wx
a = wx.App(redirect=False)
TARGET_DIR="/py_exp/testing"
def real_callback(*args):
    wx.MessageBox(str(args),"QQQQ")
def callback(*args):
    wx.CallAfter(real_callback,*args)
w = watcher.Watcher(TARGET_DIR, callback)
w.flags = watcher.FILE_NOTIFY_CHANGE_FILE_NAME
w.start()
f = wx.Frame(None)
a.MainLoop()

然后只需从目录中添加和删除文件(注意,新弹出窗口可能会弹出在现有弹出窗口的后面…但是如果移动它们,您应该会看到所有这些文件)

相关问题 更多 >