【问题标题】:wxpython control problems when migrating from win to mac从win迁移到mac时的wxpython控制问题
【发布时间】:2015-02-24 17:35:32
【问题描述】:

我有一个在 windows 上开发的 python(2.7)/wxpython 程序,我正在尝试迁移到 mac,但遇到了一些问题。

我遇到的问题由两个面板组成:

面板 A 包含一个树形控件,其中包含键值对并禁用了用户编辑。

面板 B 包含一组不同类型的控件(filePicker、textCtrl、valueCtrl、choice、checkbox、comboBox 和 spinEdit),所有这些控件最初都是禁用的

当用户选择树节点时,程序会检查键并决定应该使用面板 B 上的哪个控件来编辑树节点的值。然后面板 A 使用 pubsub 将相关信息发送到面板 B,该 pubsub 初始化并启用相关控制。面板 B 上的每个控件都有一个 EVT_KILL_FOCUS 事件,因此当用户离开控件时,控件值会使用 pubsub 发送回面板 A,并且树节点的值会更新,并且面板 B 上的编辑控件会被禁用。这在 Windows 上运行良好。

在mac上我有以下问题:

  1. 文件选择器和 spinCtrl 不能被禁用 - 如果这些控件中的任何一个不恰当地获得焦点,这可能会导致不正确的信息被发送回 treeCtrl

  2. spinctrl、choice、checkbox 和 comboctrl 似乎没有触发 EVT_KILL_FOCUS 事件,因此没有信息发送回 treeCtrl。我通过绑定 EVT_CHOICE 在选择控件上解决了这个问题。对其他控件使用非焦点事件效果不佳,并且会产生不良行为。

所以我的问题是:

1:是否可以在 OSX 上禁用文件选择器和 spinCtrl?

2:有没有办法在mac上使用spinctrl、choice、checkbox和comboctrl控件的kill focus事件?

3:如果无法使用填充焦点事件,是否会在编辑完成后触发每个控件的替代事件?

谢谢 抢

【问题讨论】:

    标签: python macos wxpython


    【解决方案1】:
    1. 您使用的是哪个版本的 wxPython?在当前版本中禁用这些类型的小部件似乎对我来说效果很好。

    2. 出于某种原因,Apple 认为永远不要将键盘焦点放在某些类型的控件上是个好主意,因为显然没有人愿意将它们与鼠标或触控板一起使用。因此,如果小部件永远不会获得焦点,那么它永远不会失去它,因此也不会有任何 EVT_KILL_FOCUS 。您可以通过将“完全键盘访问”设置为“所有控件”来在“系统偏好设置”的“键盘”面板中更改此设置

    【讨论】:

    • 在 mac(OS 10.9) 上,我正在运行 python 2.9 和 wxpython 2.9.2.4-1 (enthought canopy 1.5.2)。
    • 在 mac(OS 10.9) 上,我正在运行 python 2.9 和 wxpython 2.9.2.4-1 (enthought canopy 1.5.2)。我已将键盘设置为“所有控件”,但这似乎没有什么区别。实际上,这些控件在初始化期间是被禁用的,虽然它们在面板首次显示时没有被禁用,也不会在失去焦点后被禁用
    猜你喜欢
    • 2011-11-05
    • 1970-01-01
    • 2010-09-15
    • 2020-04-19
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多