【问题标题】:Unexpected “default item” behavior意外的“默认项目”行为
【发布时间】:2014-03-22 00:04:42
【问题描述】:

我正在创建一个 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. 为什么“确定”按钮没有脉动的蓝色“默认按钮”外观?它应该看起来像这样:

【问题讨论】:

  • 包含 TextCtrl: 1. Return 点击 OK with self.SetDefaultItem(ok_button)。 2.返回NOT点击ok without self.SetDefaultItem(ok_button)。使用 python 2.7 + wxPython3.0 在 win7 上测试似乎是 OSX 的一个狡猾的实现

标签: wxpython wxwidgets


【解决方案1】:

使用ok_button.SetDefault() 代替self.SetDefaultItem(ok_button)。第一个只是通知对话框哪个将是默认按钮,但不告诉按钮任何内容。后者告诉按钮是默认的,然后告诉父级。

【讨论】:

    猜你喜欢
    • 2010-12-23
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2019-12-19
    相关资源
    最近更新 更多