Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxPython事件的顺序给我带来了问题_Python_Wxpython_Wxwidgets - Fatal编程技术网

wxPython事件的顺序给我带来了问题

wxPython事件的顺序给我带来了问题,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,我的GUI由左侧的wx.ListCtrl和右侧的一组wx.TextCtrls组成,用于编辑所选对象 我的实施策略是: 在文本框的wx.EVT\u KILL\u FOCUS上,更新当前选定对象的相关属性 列表中的代码> Wx.EvtListListItMyEddieDe< ,要么隐藏文本框,要么将它们空格并禁用它们(当用户单击列表控件中的空白时需要的) 在列表的wx.EVT\u list\u ITEM\u SELECTED上,用所选对象属性的值填充文本控件 使用此设置,有3个用例,其中2个可用

我的GUI由左侧的
wx.ListCtrl
和右侧的一组
wx.TextCtrl
s组成,用于编辑所选对象

我的实施策略是:

  • 在文本框的
    wx.EVT\u KILL\u FOCUS
    上,更新当前选定对象的相关属性
  • 列表中的代码> Wx.EvtListListItMyEddieDe< <代码>,要么隐藏文本框,要么将它们空格并禁用它们(当用户单击列表控件中的空白时需要的)
  • 在列表的
    wx.EVT\u list\u ITEM\u SELECTED
    上,用所选对象属性的值填充文本控件
使用此设置,有3个用例,其中2个可用:

  • 当用户在文本框之间单击/切换时,会出现正确的
    wx.EVT\u KILL\u焦点
    s,并更新属性

  • <> L> >P>当用户从文本框中单击列表中的空白时,也可以:首先,代码> WX.EvtKiLixField导致属性更新,然后<代码> Wx.EvtListItIsMyEdMeDeDe> 隐藏文本框。

  • 问题是当用户直接从文本框单击列表控件中的另一个对象时。在这种情况下,事件的顺序是取消选择
    wx.EVT\u列表\u项目
    wx.EVT\u列表\u项目
    ,最后是
    wx.EVT\u KILL\u焦点
    。您可能会看到问题:在调用更新属性的方法时,已经选择了一个新对象,文本框中已经填充了新值


  • 所以我很清楚问题是什么,但我不能想出一个好的、干净的方法来解决它。理想情况下,我希望能够更改wx事件的顺序(将
    wx.EVT\u KILL\u FOCUS
    放在前面),但我怀疑这是否可能。我还缺少其他明显的解决方案吗?

    wx.EVT\u LIST\u ITEM\u取消选择仅当用户更改列表框中的选定对象时才会激发。这与在文本框上失去焦点的目的相同。也从该事件调用更新例程。要从文本框中跳过后续的wx.EVT_KILL_焦点,请在更新属性后在父对象中设置“isDirty”属性。您可以随时检查isDirty值以确认是否有要提交的更改。当您填充新选择的文本框时,必须重置此属性,然后在其他文本框事件期间设置此属性。

    在我看来,您正在尝试从头开始重新实现wxListbook的功能。看起来需要做很多工作,也许你可以使用wxListbook 做你需要的事


    好主意,我想这会很好用。我现在正在做其他的事情,但是当我回到这个问题上来时,我会尝试一下。干杯嗯,这也是一个很好的观点。当我回到这个问题时,我需要考虑其他一些事情。事实证明wxListBook对我没有好处,因为“底层的wxListCtrl在一列报表视图中显示页面标签”。我需要多个栏目。