- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 wxPython 应用程序使用 wx.ScrolledWindow 作为主要绘图区域 - 直接从演示中取出并根据我的需要进行修改。当用户双击滚动区域时,我想弹出一个(可能是模态的)对话框来编辑他们绘制的东西的参数。所以我通过另一个演示的代码弹出了一个对话框:
def OnLeftDoubleClickEvent(self, event):
dlg = TestDialog(self, -1, "Sample Dialog", size=(350, 200),
#style=wx.CAPTION | wx.SYSTEM_MENU | wx.THICK_FRAME,
style=wx.DEFAULT_DIALOG_STYLE, # & ~wx.CLOSE_BOX
)
dlg.CenterOnScreen()
# this does not return until the dialog is closed.
val = dlg.ShowModal()
当然这只是一个测试。对话本身在其中一个演示中得到了完整的定义。无论如何,在关闭弹出窗口时,ScrolledArea 跳转到一个新位置,并且在 Windows 上,鼠标事件不再映射到正确的坐标。仅当您移动弹出窗口时才会发生位移,以便您在滚动区域区域外单击鼠标以将其关闭。请记住,“确定”和“取消”位于与滚动区域完全不同的对话框中。在 Linux 上,滚动区域似乎会根据鼠标单击区域之外的距离移动 - 并且方向相同。在 Windows 上,滚动区域会移动并变得困惑 - 进一步的鼠标点击也会取代它,并且(因为?)点击被记录在错误的位置。
所以Linux版本的问题似乎表明弹出窗口上的点击事件实际上是由原始窗口中的滚动区域处理的。
这听起来像是正在发生的事情吗?
如果是这样,我该如何防止这种情况发生?
编辑:更多信息。我尝试通过切换到“确定”或“取消”按钮来关闭弹出窗口。每次焦点移动到另一个控件时,另一个窗口中的滚动区域也会移动。这取决于弹出窗口相对于其他窗口的位置。我现在完全糊涂了。
EDIT2:我在主窗口的菜单中添加了一个选项来触发弹出对话框。这样激活的时候,好像没有什么问题。我认为问题是由于在滚动区域的双击事件中创建弹出窗口导致某些事件由两者处理。那有意义吗?当我有时间时,我将尝试向父对话框发送一个事件(自定义?)并让它映射到与新菜单项相同的功能。这将导致我的弹出窗口来自主窗口,并有望消除该问题。我们拭目以待。
EDIT3 测试用例
要查看此文件,请从演示中获取文件:ScrolledWindow.py,添加以下内容:
from Dialog import *
然后在 MyCanvas 类的鼠标事件区域中,绑定(bind)双击:
self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDoubleClickEvent)
然后将以下函数添加到同一个类(取自 Dialog 演示):
def OnLeftDoubleClickEvent(self, event):
useMetal = False
if 'wxMac' in wx.PlatformInfo:
useMetal = self.cb.IsChecked()
dlg = TestDialog(self, -1, "Sample Dialog", size=(350, 200),
#style=wx.CAPTION | wx.SYSTEM_MENU | wx.THICK_FRAME,
style=wx.DEFAULT_DIALOG_STYLE, # & ~wx.CLOSE_BOX,
useMetal=useMetal,
)
dlg.CenterOnScreen()
# this does not return until the dialog is closed.
val = dlg.ShowModal()
if val == wx.ID_OK:
self.log.WriteText("You pressed OK\n")
else:
self.log.WriteText("You pressed Cancel\n")
dlg.Destroy()
现在运行演示并选择 Core Windows/Controls 和“ScrolledWindow”。您将能够像往常一样在滚动区域上涂鸦,但现在您可以双击那里,它会弹出一个对话框。请将该新对话框移到绘图区域之外,然后在输入框周围使用 Tab 键或单击“确定”。此对话框中的事件将导致另一个窗口中的可滚动绘图改变位置。
就是这样。是什么原因造成的?我已经修改了演示以绘制我自己的自定义对象,并且我希望能够双击以显示对象属性对话框。这是一个错误,还是错误的解决方法?我在 Edit2 中的计划更像是“正确的方式”吗?
最佳答案
解决方案原来是我在Edit2中提出的。我不确定为什么,但是从 ScrolledArea DoubleClick 事件内部弹出会导致问题。解决方案是创建自定义消息并在双击事件中将其发送给自己。自定义事件由顶层窗口处理,而不是滚动区域。这工作正常,但现在我必须将所选对象的 ID 存储在某处,以便顶层窗口可以将其传递给对话框。这个稍微多了点功夫,但是感觉比在绘图区的双击事件里面弹出一个窗口更“正确”。但是,该窗口仍在事件处理程序中弹出,它只是用不同的事件处理它的不同对象。为什么这有效的细节仍然让我困惑。
我确信有一种思考方式可以使这个解决方案显然是正确的。我仍然会投票支持一个答案,该答案提供了为什么一种方法有效而另一种方法无效的见解,或者做这种事情的“正确”方法是什么。
在其他新闻中,我是在这个问题的 +50 赏金到期后发布的。是的,我在尝试自己的想法之前发布了赏金 - 愚蠢的我。下次我会在提供赏金之前尝试 wxPython 邮件列表,尽管我不喜欢邮件列表。
关于event-handling - 防止 wxPython 事件命中多个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6143268/
关于 APC 操作码缓存,什么是“命中与未命中”?我已经安装了 APC 并且它运行良好,但我有“一些”失误,我想知道这是否“不好”。此外,我正在运行 Openx,因此,我很快就会填满“缓存完整计数”。
我试过这个: def test_send_confirm_hit(monkeypatch): hit = False def called(): global hit
是否可以将找到的单词插入到替换中? $(function() { content = 'hallo mein name ist peter und ich komme aus berlin.
我有一个允许用户将文件上传到文件夹的网站。首先,我检查文件是否存在,如果存在,然后检查复选框的值以确定用户是否要覆盖现有文件。如果点击上传并且未选中该框,我会执行一个带有消息和后退按钮的 die()
我有多个不同的进程通过 IPC 进行通信,当使用 gdb 调试单个进程时,每当遇到断点时,我都会尝试向其他进程发送消息。有没有一种方法可以自动在遇到断点时自动调用一个函数/一段代码(NotifyAll
目前,通过管道传输到 jq 的 cat 命令帮助我解析工作目录中的多个 JSON 文件,并根据正则表达式模式匹配文件中所有可用的电子邮件 ID。但是,我很想识别正则表达式模式被命中/匹配的文件名 ca
我们希望将 podname 解析为 IP,以在 akka 集群中配置种子节点。这是通过在 Kubernetes 中使用 headless (headless)服务和有状态集的概念来实现的。但是,如何在
Maven 项目具有以下文件夹结构: src/main/java src/main/resources src/test/java src/test/resources 如果我们导航到 Maven 项
我只使用 c 几个星期,所以很可能会出现我忽略的明显错误。我看过其他线程,但我不明白我正在读的很多内容。该程序假设有一个无限大的牌组。 已知问题: clearBuffer 当前未使用,我正在尝试不同的
我已将我的 AdMob 代码实现到我的 XML 文件中,如下所示: 在我的 Activity 的 onCreate 方法中: // load ads
我的作业是通过示例程序确定给定跟踪文件的缓存读/写/未命中/命中次数。 举例来说,这是示例跟踪输出的前 10 行。 0x37c852: W 0xbfd4b18c 0x37cfe0: W 0xbfd
https://plnkr.co/edit/2h6fV5yTjeUqLP3SvbvO?p=preview 预期 登录后应用程序重定向到 $state container,其中包含 dashboard
ElasticSearch 独立于 from 和 size 参数,基于查询的所有命中构建聚合结果。在大多数情况下,这是我们想要的,但我有一个特殊情况,我需要将聚合限制为前 N 个命中。 limits
我使用 Intel PCM 进行细粒度的 CPU 测量。在我的代码中,我试图测量缓存效率。 基本上,我首先将一个小数组放入 L1 缓存(通过多次遍历),然后启动计时器,再遍历数组一次(希望使用缓存),
我在为 javascript 滑动元素定义点击区域时遇到问题。 参见示例: http://www.warface.co.uk/clients/warface.co.uk/ 请滑过右侧的灰色框以显示按钮
我正在尝试在 foldersystem 中使用 os.walk() 找到几个 'my_file.bat',如果文件名匹配它应该用 subprocess.call() 或 .run() 调用。问题是 o
我有一个端点,我可以在其中请求我使用 Siesta 查询的多条数据(例如 https://example.com/things?ids=1,2,3) .如果我只缓存了一些 things ,我试图弄清楚
这是我的代码: public static function test(){ try{ $apiContext = ApiContext::create(
我使用 PHP 在需要时传递登录表单,代码如下: $htmlForm = ''.''; switch(LOGIN_METHOD) { case 'both': $htmlFor
我正在使用 nginx-lua带有 redis 的模块提供 ember-app 的静态文件. index文件内容存储在redis作为 value由 nginx 正确提供服务当(根)domain/IP被
我是一名优秀的程序员,十分优秀!