问题标签 [wxphp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
452 浏览

php - wxPHP 线程应用程序因 0xc0000005 异常而崩溃

我正在尝试使用 wxPHP 编写一个简单的应用程序,该应用程序使用exec('ping')命令从文件中 ping IP。

我希望结果在后台被 ping 时一一显示在 GUI 中,所以我exec('ping')在线程中执行命令。

但是我得到了非常奇怪的错误和行为。问题是我无法重现错误。有时该程序工作得很好。有时它会在线程中崩溃。有时它在发送事件时会崩溃。等等

以下是我从命令行运行程序时遇到的错误:

这是我的代码:

这是我在 Windows 错误日志中得到的错误:

错误模块的变化取决于我是调用 php 函数还是调用exec()线程Entry()。但异常代码始终是0xc0000005.

错误中一致的一件奇怪的事情是错误,例如

如果您阅读代码,您会意识到根本没有这样的调用。实际上$parent只在线程中访问。我在线程中的其他函数中遇到了类似的错误。似乎应用程序没有意识到它在线程中并且$this在线程中指向主框架对象。

我想我的代码或者 wxPHP 可能有什么问题。这个程序昨晚不工作,然后今天早上开始工作。然后我添加了一个图标和一些背景颜色,它突然又给了我错误。

其他信息

  • 不适用于:

    Windows 7-64bit - wxphp-3.0.2.0-php5.6-x64.exe

    Windows 7-32bit - wxphp-3.0.2.0-php5.4-x86

  • 与 wxPHP 包捆绑在一起的示例thread.wxphp应用程序也不起作用。
  • 但是,我的代码和示例应用程序都可以在 Linux ( Linux Mint-32bit - php5-wxwidgets_3.0.2.0_i386) 上正常运行。
  • 当我从线程 中删除两者时exec(),我没有收到任何错误。QueueEvent()Entry()

有谁知道这里发生了什么?

0 投票
1 回答
474 浏览

php - 将 PHP Web 应用程序转换为独立应用程序

我创建了一个 Web 应用程序。我使用 wxPHP 将其转换为独立的桌面应用程序。一切正常,除了我需要访问 CLI 来编写如下命令:

D:\wamp\www\Vishnu\wxPHP\examples>wxphp myApp.php

我不想这样做,因为我的客户不熟悉它。所以我需要有 .exe 应用程序。它应该是,当我单击myApp.php需要执行的特定链接(按钮)文件时。这是我的 PHP 程序:

有没有办法做到这一点?

0 投票
1 回答
313 浏览

php - 如何在 Ubuntu/Unity 中使用 wxPHP 创建任务栏图标?

经过一番努力,我已经为 wxPHP 编译了 PHP 模块,并且正在编写一些脚本来看看它可以做什么。我的第一个演示创建了一个窗口和一个任务栏图标,但我无法让后者工作。

我在 Ubuntu 14.04 LTS 上运行它。

这是我正在使用的脚本:

现在,我想 Unity 中的“任务栏”是具有时钟、声音和网络控件的顶部栏,而不是左侧的应用程序停靠栏。当 PHP 任务运行时,我确实在 Dock 中看到了一个空白的灰色应用程序图标,但它是我所追求的顶部的状态图标。

上述脚本的控制台输出显示一切正常:

我尝试将其更改icon.ico为一个不存在的文件,这会弹出一个回溯对话框,这表明我正在使用的图标正在成功加载(并且可能是可接受的格式)。

编辑:进一步的研究表明:

因此,我目前的猜测是,如果不是因为 Unity 阻止该操作,我的代码将可以工作 - 并且它会立即在其他发行版(如 Mint)中工作。

我确实找到了解释如何在 Ubuntu 14 上加入白名单的指南,但这是最不令人满意的;做一件如此微不足道的事情不需要改变受信任的回购列表。如果我希望分发一个用 wxPHP 编写的应用程序,用户会(并且应该)发现这是不可接受的。

有几种研究途径,我现在正在寻求建议:

  • 在 wxPHP 中做一些不同的事情,以防它(或上游 wxWidgets)支持 AppIndicators(我猜它不支持)
  • 检测 AppIndicators 是否正在运行,以及是否使用 PHP 发送 DBus 消息来构建图标(尽管我徒劳地寻找 AppIndicators 的 DBus 消息规范)

再次编辑:因为这是一个相当小众的问题,并且由于Ask Ubuntu带有许多与 Ubuntu 平台编程相关的问题,我已经在该站点上询问了一个 DBus 特定的问题。

0 投票
1 回答
148 浏览

php - 如何从 wxPHP 中的 wxFrame 检索单个控件?

我正在使用wxXmlResource(). 这很好地加载了窗口,但我不确定如何获取对命名窗口元素的对象引用。

这是我的代码:

$textCtrl项目应该是一个wxStaticText对象,但它已作为一个wxWindow(它是一个父类)返回。由于它没有被转换为正确的对象类型,所以我不能调用属于控件自己的类的方法(例如Wrap())。

我认为这个FindWindow()电话是有效的,因为如果我故意弄错名字,它会返回null.

我究竟做错了什么?

0 投票
1 回答
199 浏览

php - 如何在 wxPHP 中重新打开关闭的 wxAuiManager 窗格?

我正在使用 wxPHP 对 wxAuiManager 进行试验,以了解如何在可停靠窗口中围绕中心固定元素排列窗格元素。这里的文档相当稀少,所以我感觉自己在使用自动完成!

默认情况下,我的窗格元素有一个关闭图标,单击它会成功关闭窗格,但我现在对恢复关闭的窗格感兴趣。这似乎并不像人们想象的那么微不足道。

似乎默认关闭窗口会破坏它,但我相信这可以通过使用DestroyOnClose(). 我正在做这样的初始化,在 a 的上下文中wxFrame

关闭窗格后,要恢复我正在执行此操作,在相同的wxFrame上下文中:

文本输出在关闭后最初指示“否”,然后再次运行此代码会产生“是”。因此,Show()似乎确实有效果,但它并没有重新回到 wxAuiManager 排列中——我完全看不出框架内容有什么不同。

我错过了什么?我在 Ubuntu 14.04 上运行 PHP 5.5.9,wxwidgets扩展名是自定义编译的。

0 投票
1 回答
1125 浏览

php - 更新 wxPHP 中的属性时如何刷新 wxAuiManager 窗格?

我已经建立了一个wxAuiManager包含八个文本控件的简单系统,每个控件都设置为一个窗格,所有控件都围绕一个中央静态控件排列。我有两个分别捕捉到顶部、左侧、右侧和底部窗格方向。这部分工作正常。

我现在想修改每个窗格的属性,我认为可以通过重置关联的wxAuiPaneInfo. 例如,我想添加/删除图钉或最大化图标。我可以让它自己工作,但是在重置这些属性后重新绘制托管窗口被证明是一个挑战。

这是我目前使用的代码:

如您所见,我目前所做的是将窗格与管理器分离,重新添加它,然后强制管理器重绘所有内容。这很好,除了它经常将窗口重新停靠在新位置。它也不“感觉正确” - 修改这些属性必须能够独立于分离窗格来实现。

相反,我认为值得尝试隐藏和显示窗格,但无济于事:

另外,我尝试过使用窗格加载器,尽管我不知道“透视字符串”是什么——据我所知,它不是一个控制属性。

所以,总而言之:我有一个可行的解决方案,但它并不理想,因为它重新停靠了有问题的窗格。我想我可以制定出正确的命令将它重新停靠在同一个地方,但我仍然觉得我应该能够以更简单的方式做到这一点。

有任何想法吗?


更新:我发现了如何使用透视图捕获窗格信息,可以这样做:

我现在需要做的就是捕获一个窗格移动事件,然后我可以将此数据与LoadPaneInfo(). 事实证明这有点困难——wxPHP 似乎没有提供足够wxEVT的常量来允许这样做。我对此提出了一个新问题

我会继续尝试一些新的东西。

0 投票
2 回答
197 浏览

php - wxPHP 中是否存在 AUI 窗格移动(或停靠)事件?

这个问题上,我一直在尝试捕获 AUI 窗格配置,以便在关闭任何窗格时可以恢复它。wxPHP 的文档有些有限,wxWidgets 的文档在上游,所以我在很大程度上是摸索着自己的方式。

我已经意识到这SavePaneInfo将帮助我捕获窗格的状态 - 它输出一个透视字符串,表示在给定时刻窗格的位置和选项。因此,我需要做的就是捕捉窗格何时发生变化并更新它的内部表示。

为了感兴趣,一个透视图是这样的:

name=auiPane3;caption=Caption 3;state=2099196;dir=3;layer=0;row=0;pos=1;prop=100000;bestw=90;besth=25;minw=-1;minh=-1 ;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1

然而,捕获移动/停靠事件并非易事。我可以看到与 AUI 相关的六个事件:

我已经能够捕获恢复和关闭事件,而 find_manager 似乎没有做任何事情。我试过wxEVT_ANY这个窗口,它似乎也没有捕捉到任何东西。我也在单个窗格上尝试过,但无济于事(据我所知,没有任何调用):

上游库 wxWidgets 的文档提到了这个事件:

然而,这似乎并没有在 wxPHP 中实现——这就是我想要的吗?这听起来不太对,但如果我可以在没有常量的情况下访问它,我当然会尝试它。

我想我可以使用wxAuiManager::SetArtProvider标准的艺术提供者对象,修改为捕获窗格状态,但这感觉就像是一把大锤来破解坚果。我还可以捕获关闭事件并更改返回的透视字符串,因此未设置“关闭”位,但这也不是特别优雅。

我想做的事情感觉真的很微不足道,并且会与 wxWidgets 的其他部分保持一致,但事实并非如此。有什么建议可以尝试吗?