意外的“默认项目”行为

时间:2014-02-20 19:53:09

标签: wxpython wxwidgets

我正在创建一个wx.Dialog子类,我对于对话框的DefaultItem属性应该如何工作有点困惑。我在OS X上运行。我把这个简短的例子放在一起:

import wx

class DialogTest(wx.Dialog):
    def __init__(self, parent):
        wx.Dialog.__init__(self, parent)

        # text_entry = wx.TextCtrl(self, wx.NewId(), '')

        button_sizer = wx.StdDialogButtonSizer()

        ok_button = wx.Button(self, wx.ID_OK, 'OK')
        button_sizer.SetAffirmativeButton(ok_button)
        self.SetDefaultItem(ok_button)

        cancel_button = wx.Button(self, wx.ID_CANCEL, 'Cancel')
        button_sizer.SetCancelButton(cancel_button)

        button_sizer.Realize()

        outer_sizer = wx.BoxSizer(wx.VERTICAL)
        # outer_sizer.Add(text_entry)
        outer_sizer.Add((100, 100))
        outer_sizer.Add(button_sizer, flag=wx.ALIGN_RIGHT | wx.BOTTOM, border=6)

        self.SetSizer(outer_sizer)
        outer_sizer.Fit(self)


if __name__ == '__main__':
    app = wx.App(False)
    DialogTest(None).ShowModal()
    app.MainLoop()

这将显示一个带有“确定”和“取消”按钮的简单对话框。如果取消注释两个注释掉的行,则还会有一个文本框。我有两个问题:

  1. 如果我取消注释TextCtrl行,那么我可以按Return键激活OK按钮。如果这些行已注释掉,按Return键不会“单击”确定。 (我试着先在窗口内点击,以确保这不是某种焦点问题,但这并没有改变任何东西。)为什么我不能使用Return来点击没有文本字段的OK按钮? (无论文本字段是否存在,按下Esc都会激活取消按钮。)

  2. 为什么OK按钮没有闪烁的蓝色“默认按钮”外观?它看起来应该是这样的:

  3. Screenshot of standard OS X buttons, showing a normal Cancel button and an OK button that has the glowing blue “default” appearance.

1 个答案:

答案 0 :(得分:1)

而不是self.SetDefaultItem(ok_button)使用ok_button.SetDefault()。第一个只是通知对话框,它将是默认按钮,但不会告诉按钮任何东西。后者告诉按钮是默认按钮然后告诉父母。