作为wx的新手,我想知道是否有一个IDE(特别是Linux)可以帮助我布置一个框架或对话框,或者只是为了帮助我看看我在做什么.这意味着还要为这些更改创建代码.
我记得当使用资源编译器为OS/2和Windows生成二进制文件然后创建窗口,并希望有类似的东西(虽然显然不是二进制,如果wx不支持).
我如何在wxPython中振动窗口.我想要一些方法来指定它的长度和距离以及类似的东西.
是否有内置功能我没有注意到或者我是否必须自己编写代码?
(我正在考虑将窗口向侧面移动几次,但我宁愿使用可能更快的内置函数.)
我正在使用wxWigets,但我想这个问题更多的是如何实现虚函数的回调.这是我的代码的(非常)简化版本:
// MyGUI.h
Class MyGUI : public wxFrame {
...
protected:
virtual void onFeedButton_cb( wxCommandEvent& event ) { event.Skip(); }
...
}
// Animal.h
Class Animal {
public:
void Feed();
}
Run Code Online (Sandbox Code Playgroud)
一个小问题:我如何实现onFeedButton_cb回调,以便它可以访问Animal的Feed()函数?即在运行时,回调必须能够访问Animal的实例.
我正在使用Boost Python为wxWidgets子集创建绑定.wxWidgets中的窗口对象不应手动删除,因为它们处理自己的删除:例如,当用户单击关闭按钮关闭顶级窗口时,它会自动删除自身.如果一个窗口被删除,奇怪的事情将事件处理程序等情况的发生
(详情:http://docs.wxwidgets.org/2.8/wx_windowdeletionoverview.html)
但是这导致了在Python中创建的窗口对象的问题:在垃圾收集时,C++对象总是被删除!
有没有办法告诉Boost Python不要拥有它创建的C++对象?或许类似于构造函数的调用策略?
(另外,我有点担心如何处理从C++中删除的对象.当关联的C++对象被删除时,Python对象会发生什么?Python不会以任何方式得到通知.)
我最近学习wxPython通过wxPython in Action,但我被困在第3章,特别是对的解释Figure 3.3的Skip()钻石
在Step 3 Locating the binder object,书中写道:
如果没有找到对象本身的绑定器,则处理在类层次结构中向上查找在对象的超类中定义的绑定 - (1)这与在容器层次结构中的向上走动不同下一步.
但在下一步中,Step 4 Determining whether to continue processing写道:
事件处理程序通过调用wx.Event方法Skip()来请求更多处理.如果调用Skip()方法,则继续处理,并且(2)在步骤中找到并执行在(3)超类中定义的任何处理程序.可以在处理程序中的任何位置调用Skip()方法.Skip()方法在事件实例中设置一个标志,wxPython在处理程序方法完成后进行检查.在清单3.3中,OnButtonClick()不调用Skip(),因此在这种情况下,事件处理在处理程序方法结束时完成.另外两个事件处理程序会调用Skip()(4),因此系统将继续搜索匹配的事件绑定,(5)最终调用鼠标进入和离开事件的默认功能,例如鼠标悬停事件.
我的问题与我在段落中标记的数字有关:
(1)在我的理解和其他一些googled材料中,传播是在容器层次结构中发生的事情,而不是类层次结构,这是正确的吗?
(2)说真的吗?任何处理程序都被执行?不是匹配实例和事件组合的那些?
(3)这里的超类是否正确?不应该是父窗户吗?
(4)我认为这一行与question2相矛盾,所以也许没有执行任何处理程序,只是匹配实例和事件组合的处理程序?
(5)什么是default functionality?它是如何被调用的?
如果有人有兴趣,list-3.3.py就在这里:
import wx
class MouseEventFrame(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, 'Mouse Events',
size=(300, 200))
self.panel = …Run Code Online (Sandbox Code Playgroud) 我制作了一款使用游戏循环的游戏.现在我想在wxWidgets中为这个游戏实现一个GUI.
问题是,当我初始化GUI时,程序的控制仍然在GUI循环上,并且不会进入游戏循环.
那么,我可以让GUI在自己的线程上运行吗?
我收到链接器错误,指示链接器无法打开文件(静态库),因此失败.我正在非常困难地排除此错误,因为我从未告诉链接器链接到它无法打开的文件.
我告诉链接器链接到几个静态库.我链接的许多库都是wxWidgets静态库.我不需要来自wxWidgets的所有模块,因此有一些我链接到的和许多我不是.链接器无法打开的文件是'wxbase31ud_net.lib'.就像我说的那样,该文件不在我链接的库中.我的直接想法是,这种依赖性是以某种方式隐式引入的,可能是我链接到的一个wxwidgets库.我不认为静态链接是这样工作的,但我没有任何其他想法.我一直在研究这种可能性,但我没有发现任何迹象表明情况.
什么可能导致链接器尝试打开此文件?
编辑:另外,要清楚,我看到的错误是LNK1104
这显然是我自学计算机科学教育的一个漏洞......
wxWidgets应用程序中文本控件(wxTextCtrl)的构造函数具有验证器对象的可选参数.所有代码示例都在文本控件的构造函数中动态创建验证器.
这有效..
wxString value = L"0.0";
wxTextCtrl* _Text = new wxTextCtrl(this, wxID_ANY, value,
wxDefaultPosition, wxDefaultSize, 0,
wxTextValidator(wxFILTER_NUMERIC, &value));
Run Code Online (Sandbox Code Playgroud)
但是在我的特殊情况下,我想在另一个函数中创建验证器并将其传回,这是行不通的.作为一个中间步骤,我试图在创建wxTextCtrl之前创建它并将其传递但是这也不起作用......
wxString value = L"0.0";
wxValidator valid = wxTextValidator(wxFILTER_NUMERIC, &value);
wxTextCtrl* _Text = new wxTextCtrl(this, wxID_ANY, value,
wxDefaultPosition, wxDefaultSize, 0, valid);
Run Code Online (Sandbox Code Playgroud)
虽然这编译并运行但它不执行验证.有谁能解释为什么?
wxTextValidator的原型调用常量引用.
wxTextCtrl::wxTextCtrl ( wxWindow * parent,
wxWindowID id,
const wxString & value = wxEmptyString,
const wxPoint & pos = wxDefaultPosition,
const wxSize & size = wxDefaultSize,
long style = 0,
const wxValidator & validator = wxDefaultValidator,
const wxString & …Run Code Online (Sandbox Code Playgroud) 我在Linux或FreeBSD上构建wxWidgets库时注意到,wxWidgets需要其他GUI库,例如GTK +,Motif等。而GTK +,Motif或FLTK库似乎是独立的,因为它们不需要任何其他GUI库。
尽管这些库需要xlib,但是我们不必对xlib做任何事情。
我不明白
wxwidgets ×10
c++ ×3
wxpython ×3
python ×2
boost-python ×1
c++11 ×1
events ×1
linker ×1
polymorphism ×1
visual-c++ ×1