问题标签 [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.
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()
有谁知道这里发生了什么?
php - 将 PHP Web 应用程序转换为独立应用程序
我创建了一个 Web 应用程序。我使用 wxPHP 将其转换为独立的桌面应用程序。一切正常,除了我需要访问 CLI 来编写如下命令:
D:\wamp\www\Vishnu\wxPHP\examples>wxphp myApp.php
我不想这样做,因为我的客户不熟悉它。所以我需要有 .exe 应用程序。它应该是,当我单击myApp.php
需要执行的特定链接(按钮)文件时。这是我的 PHP 程序:
有没有办法做到这一点?
php - 如何在 Ubuntu/Unity 中使用 wxPHP 创建任务栏图标?
经过一番努力,我已经为 wxPHP 编译了 PHP 模块,并且正在编写一些脚本来看看它可以做什么。我的第一个演示创建了一个窗口和一个任务栏图标,但我无法让后者工作。
我在 Ubuntu 14.04 LTS 上运行它。
这是我正在使用的脚本:
现在,我想 Unity 中的“任务栏”是具有时钟、声音和网络控件的顶部栏,而不是左侧的应用程序停靠栏。当 PHP 任务运行时,我确实在 Dock 中看到了一个空白的灰色应用程序图标,但它是我所追求的顶部的状态图标。
上述脚本的控制台输出显示一切正常:
我尝试将其更改icon.ico
为一个不存在的文件,这会弹出一个回溯对话框,这表明我正在使用的图标正在成功加载(并且可能是可接受的格式)。
编辑:进一步的研究表明:
- 早期版本的 Ubuntu 阻止应用程序使用任务栏,除非特别列入白名单(请注意,
gsettings
此处引用的键在我的更高版本的 Ubuntu 中找不到) - 更高版本需要名为 AppIndicators 的东西
因此,我目前的猜测是,如果不是因为 Unity 阻止该操作,我的代码将可以工作 - 并且它会立即在其他发行版(如 Mint)中工作。
我确实找到了解释如何在 Ubuntu 14 上加入白名单的指南,但这是最不令人满意的;做一件如此微不足道的事情不需要改变受信任的回购列表。如果我希望分发一个用 wxPHP 编写的应用程序,用户会(并且应该)发现这是不可接受的。
有几种研究途径,我现在正在寻求建议:
- 在 wxPHP 中做一些不同的事情,以防它(或上游 wxWidgets)支持 AppIndicators(我猜它不支持)
- 检测 AppIndicators 是否正在运行,以及是否使用 PHP 发送 DBus 消息来构建图标(尽管我徒劳地寻找 AppIndicators 的 DBus 消息规范)
再次编辑:因为这是一个相当小众的问题,并且由于Ask Ubuntu带有许多与 Ubuntu 平台编程相关的问题,我已经在该站点上询问了一个 DBus 特定的问题。
php - 如何从 wxPHP 中的 wxFrame 检索单个控件?
我正在使用wxXmlResource()
. 这很好地加载了窗口,但我不确定如何获取对命名窗口元素的对象引用。
这是我的代码:
该$textCtrl
项目应该是一个wxStaticText
对象,但它已作为一个wxWindow
(它是一个父类)返回。由于它没有被转换为正确的对象类型,所以我不能调用属于控件自己的类的方法(例如Wrap()
)。
我认为这个FindWindow()
电话是有效的,因为如果我故意弄错名字,它会返回null
.
我究竟做错了什么?
php - 如何在 wxPHP 中重新打开关闭的 wxAuiManager 窗格?
我正在使用 wxPHP 对 wxAuiManager 进行试验,以了解如何在可停靠窗口中围绕中心固定元素排列窗格元素。这里的文档相当稀少,所以我感觉自己在使用自动完成!
默认情况下,我的窗格元素有一个关闭图标,单击它会成功关闭窗格,但我现在对恢复关闭的窗格感兴趣。这似乎并不像人们想象的那么微不足道。
似乎默认关闭窗口会破坏它,但我相信这可以通过使用DestroyOnClose()
. 我正在做这样的初始化,在 a 的上下文中wxFrame
:
关闭窗格后,要恢复我正在执行此操作,在相同的wxFrame
上下文中:
文本输出在关闭后最初指示“否”,然后再次运行此代码会产生“是”。因此,Show()
似乎确实有效果,但它并没有重新回到 wxAuiManager 排列中——我完全看不出框架内容有什么不同。
我错过了什么?我在 Ubuntu 14.04 上运行 PHP 5.5.9,wxwidgets
扩展名是自定义编译的。
php - 更新 wxPHP 中的属性时如何刷新 wxAuiManager 窗格?
我已经建立了一个wxAuiManager
包含八个文本控件的简单系统,每个控件都设置为一个窗格,所有控件都围绕一个中央静态控件排列。我有两个分别捕捉到顶部、左侧、右侧和底部窗格方向。这部分工作正常。
我现在想修改每个窗格的属性,我认为可以通过重置关联的wxAuiPaneInfo
. 例如,我想添加/删除图钉或最大化图标。我可以让它自己工作,但是在重置这些属性后重新绘制托管窗口被证明是一个挑战。
这是我目前使用的代码:
如您所见,我目前所做的是将窗格与管理器分离,重新添加它,然后强制管理器重绘所有内容。这很好,除了它经常将窗口重新停靠在新位置。它也不“感觉正确” - 修改这些属性必须能够独立于分离窗格来实现。
相反,我认为值得尝试隐藏和显示窗格,但无济于事:
另外,我尝试过使用窗格加载器,尽管我不知道“透视字符串”是什么——据我所知,它不是一个控制属性。
所以,总而言之:我有一个可行的解决方案,但它并不理想,因为它重新停靠了有问题的窗格。我想我可以制定出正确的命令将它重新停靠在同一个地方,但我仍然觉得我应该能够以更简单的方式做到这一点。
有任何想法吗?
更新:我发现了如何使用透视图捕获窗格信息,可以这样做:
我现在需要做的就是捕获一个窗格移动事件,然后我可以将此数据与LoadPaneInfo()
. 事实证明这有点困难——wxPHP 似乎没有提供足够wxEVT
的常量来允许这样做。我对此提出了一个新问题。
我会继续尝试一些新的东西。
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 的其他部分保持一致,但事实并非如此。有什么建议可以尝试吗?