python - wxpython:检测对话框是否已关闭

标签 python user-interface dialog modal-dialog wxpython

我正在使用 wxpython 创建 GUI,并且我有以下自定义对话框类:

class GetDataDlg(wx.Dialog):

    def __init__(self, *args, **kwargs):
        self.parameters = kwargs.pop('parameters', None)
        request = kwargs.pop('request', None)
        assert self.parameters is not None
        assert request is not None
        strings = re.findall('[A-Z][a-z]*', request)
        info = ""
        for string in strings:
            if len(string) == 1:
                info = info + string
            elif not info:
                info = string.lower()
            else:
                info = info + " " + string.lower()

        wx.Dialog.__init__(self, *args, **kwargs)

        self.data = {}

        main_sizer = wx.BoxSizer(wx.VERTICAL)
        input_text = wx.StaticText(self, label="Please type the new {}".format(info))
        main_sizer.Add(input_text, 1, wx.ALL, 10)
        input_sizer = wx.BoxSizer(wx.HORIZONTAL)
        main_sizer.Add(input_sizer, 1, wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT, 10)
        text_sizer = wx.BoxSizer(wx.VERTICAL)
        input_sizer.Add(text_sizer, 1, wx.ALIGN_LEFT | wx.RIGHT, 10)
        ctrl_sizer = wx.BoxSizer(wx.VERTICAL)
        input_sizer.Add(ctrl_sizer, 1, wx.ALIGN_RIGHT)
        self.controls = controls = {}

        for key in self.parameters:
            text = wx.StaticText(self, label=key)
            text_sizer.Add(text, 0, wx.BOTTOM, 17)
            ctrl = controls[key] = wx.TextCtrl(self)
            ctrl_sizer.Add(ctrl, 0, wx.BOTTOM, 10)
        ok_button = wx.Button(self, id=wx.ID_OK)
        main_sizer.Add(ok_button, 1, wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT | wx.BOTTOM, 10)
        self.SetSizer(main_sizer)
        self.Fit()
        self.Layout()

        ok_button.Bind(wx.EVT_BUTTON, self.save_data)

    def save_data(self, event):
        for item in self.parameters:
            self.data[item] = self.controls[item].GetValue()
        event.Skip()

在我的主框架中,我这样调用对话框:

dlg = GetDataDlg(self, parameters=parameter, request=item)
result = dlg.ShowModal()

现在我需要检测用户是否按下了我的代码提供的确定按钮或类本身提供的对话框右上角的关闭按钮。在这两种情况下,result 似乎没有改变,dlg 的其他属性也没有改变。此外,我无法检查 dlg.data 是否存在,因为即使按下关闭按钮,该对话框也会保存值。

有人有什么想法吗?

最佳答案

您没有绑定(bind)关闭事件。
您是否尝试过在 OnQuit 返回 wx.ID_CANCEL 的地方插入 self.Bind(wx.EVT_CLOSE, self.OnQuit)

关于python - wxpython:检测对话框是否已关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39530471/

相关文章:

java - 如何使用 SwingWorker 和/或 Timer?

c# - 用 C++ 编程的学生学习编写 GUI : C# vs QT? 有什么更好的方法

c# - 将对话框置于窗口之上,但不置于所有内容之上

Android IllegalArgumentException 为 dismissDialog

java - JFace 对话框布局问题,在窗口边界之外绘制的小部件

python - 在二维中创建两个 Pandas 数据框的组合

python - 以编程方式取消保护 Excel 文件

python - 使用 openCV 使用固定相机提取移动球体的 X、Y、Z 位置

Python 3 : Issue importing subpackages to top-level package

user-interface - 您的开发 UI 应该与最终产品有多少相似度?