wxpython弹窗需要点击两次

各位,这是我的代码。
我希望能够根据用户点击是、否、以及取消(或点击X关闭)进行三种不同的处理,但实际使用时如果点击的不是if中第一行的按钮,弹窗则会刷新一次,我该如何修改以使不论点击哪个按钮都能判断并且只需要点击一次


                 c = wx.MessageDialog(None, '检测到本期已有数据,是否清除', but, style=wx.YES_NO|wx.CANCEL)

                if c.ShowModal() == wx.ID_YES:pass
                elif c.ShowModal() == wx.ID_NO:
                    c.Destroy()
                    de=False
                else :
                    c.Destroy()
                    wx.MessageBox('终止')
                    conn.close()
                    return

根据你提供的代码,问题可能出在你对弹窗返回值的处理上。在这里,你通过两次调用ShowModal()方法来获取用户点击的按钮返回值,但实际上每次调用ShowModal()都会弹出一个新的对话框,并且返回的值可能不同。

为了解决这个问题,你可以将返回值保存到一个变量中,然后在后续的判断中使用该变量。以下是修改后的代码示例:

c = wx.MessageDialog(None, '检测到本期已有数据,是否清除', but, style=wx.YES_NO|wx.CANCEL)

result = c.ShowModal()
if result == wx.ID_YES:
    pass
elif result == wx.ID_NO:
    c.Destroy()
    de = False
else:
    c.Destroy()
    wx.MessageBox('终止')
    conn.close()
    return

通过将返回值保存到变量result中,你可以在后续的判断中使用该变量来避免多次调用ShowModal()方法。希望这能帮助到你解决问题!如果还有其他疑问,请随时提问。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7627475
  • 这篇博客你也可以参考下:wxPython学习总结2 - 生成随机密码
  • 除此之外, 这篇博客: wxpython透镜演示系统(二):初始化与参数调节中的 初始化与参数调节面板 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    问题的根本原因是每次调用c.ShowModal()都会弹出一个新的对话框,而不是复用上一次的对话框。为了解决这个问题,我们可以使用一个变量来保存弹窗对象,并在按钮点击后进行判断。

    以下是优化后的代码:

    import wx
    
    app = wx.App()
    frame = wx.Frame(None, -1, 'My Frame', size=(400, 300))
    
    def on_dialog_button(event):
        dialog = event.GetEventObject()
        dialog.Destroy()
    
        if dialog.GetReturnCode() == wx.ID_YES:
            # 点击了"Yes"按钮
            pass
        elif dialog.GetReturnCode() == wx.ID_NO:
            de = False
            # 点击了"No"按钮
        else:
            wx.MessageBox('终止')
            conn.close()
            return
    
    def show_dialog():
        dialog = wx.MessageDialog(frame, '检测到本期已有数据,是否清除', '标题', style=wx.YES_NO | wx.CANCEL)
        dialog.Bind(wx.EVT_BUTTON, on_dialog_button)
        dialog.ShowModal()
    
    show_dialog()
    app.MainLoop()
    

    优化后的代码使用了Bind方法将按钮点击事件与回调函数on_dialog_button绑定。在回调函数中,我们可以通过GetEventObject()方法获取到被点击的按钮所属的对话框对象,然后根据按钮的ReturnCode判断用户点击了哪个按钮。

    注意:上述代码只是一个优化示例,需要根据实际情况进行修改和调整。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^