我正在创建一个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()
这将显示一个带有“确定”和“取消”按钮的简单对话框。如果取消注释两个注释掉的行,则还会有一个文本框。我有两个问题:
如果我取消注释TextCtrl行,那么我可以按Return键激活OK按钮。如果这些行已注释掉,按Return键不会“单击”确定。 (我试着先在窗口内点击,以确保这不是某种焦点问题,但这并没有改变任何东西。)为什么我不能使用Return来点击没有文本字段的OK按钮? (无论文本字段是否存在,按下Esc都会激活取消按钮。)
为什么OK按钮没有闪烁的蓝色“默认按钮”外观?它看起来应该是这样的:
答案 0 :(得分:1)
而不是self.SetDefaultItem(ok_button)
使用ok_button.SetDefault()
。第一个只是通知对话框,它将是默认按钮,但不会告诉按钮任何东西。后者告诉按钮是默认按钮然后告诉父母。