我对wxPython中的拖放感到有些困惑(但也许这些问题也适用于其他GUI框架中的拖放).框架提供了几个回调(OnEnter和OnDragOver),据称这些回调允许我通知系统当前鼠标位置是否是一个有效的位置,可以删除被拖动的任何内容.从这些方法我可以返回wx.DragNone,wx.DragCopy等.令我感到困惑的是,从这些方法中我不允许调用GetData,这意味着我不允许检查用户拖动的数据.如果我看不到数据,我怎么知道用户是否可以放弃这里?
我正在为我们正在开发的一些工具包编写一个小调试应用程序,我想将它推广给一些用户,看看他们是否可以引发任何崩溃.有没有人知道有效地包装wxPython应用程序以捕获任何和所有未处理的异常会导致应用程序崩溃的方法?
理想情况下,我想捕获所有输出(不仅仅是错误)并将其记录到文件中.任何未处理的异常都应该记录到当前文件,然后允许异常按常规传递(即日志记录过程应该是透明的).
我敢肯定以前有人必须做过这些事情,但是我没有设法通过谷歌发现任何看起来有用的东西.
我写了一个wxPython程序,我正在翻译成wxWidgets.该程序有一个滚动窗口,显示图像.在Rappin,wxPython In Action(清单12.1)之后,我在一个面板中使用了StaticBitmap.在浏览最新的wxWidgets文档时,我发现了一个可怕的警告:wxStaticBitmap应该只用于非常小的图像.它说,"......如果你想要便携地显示更大的图像,你应该使用自己的控制." 好的.给我看看.我没有"自己的控制权".
拉平错了,或文件是否过时了?
问题 - 一个新手,毫无疑问 - 是什么是在wxWidgets中做一个简单的图像视图窗口的正确方法?wxStaticBitmap的直接替代品会很好.我查看了wxWidgets"samples"目录中的"image"程序.这是一场战争与和平. 当然必须有罐头类或简单的食谱.
我按照本页的说明安装了wxWidgets-2.8.10:http://wiki.wxwidgets.org/Compiling_and_getting_started
库目录:
alex@alex-linux:/usr/local/lib$ ls | grep wx libwx_base-2.8.a libwx_base_net-2.8.a libwx_base_xml-2.8.a libwx_gtk2_adv-2.8.a libwx_gtk2_aui-2.8.a libwx_gtk2_core-2.8.a libwx_gtk2_html-2.8.a libwx_gtk2_qa-2.8.a libwx_gtk2_richtext-2.8.a libwx_gtk2_xrc-2.8.a libwxtiff-2.8.a wx
然后我创建了文件widgetTest.cpp并用以下代码填充它:http://www.wxwidgets.org/docs/tutorials/hworld.txt
试图构建它,我有很多链接器错误:
alex@alex-linux:~$ cd /home/alex/Tmp alex@alex-linux:~/Tmp$ g++ `wx-config --cppflags` `wx-config --libs` widgetTest.cpp /tmp/ccnPCAw5.o: In function `wxCreateApp()': widgetTest.cpp:(.text+0x2d): undefined reference to `wxAppConsole::CheckBuildOptions(char const*, char const*)' /tmp/ccnPCAw5.o: In function `main': ... widgetTest.cpp:(.text._ZN20wxThreadHelperThreadD0Ev[wxThreadHelperThread::~wxThreadHelperThread()]+0x16): undefined reference to `wxThread::~wxThread()' collect2: ld returned 1 exit status
附加信息:
alex@alex-linux:~$ wx-config --cppflags -I/usr/local/lib/wx/include/gtk2-ansi-release-static-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ alex@alex-linux:~$ wx-config --libs -L/usr/local/lib -pthread /usr/local/lib/libwx_gtk2_richtext-2.8.a /usr/local/lib/libwx_gtk2_aui-2.8.a /usr/local/lib/libwx_gtk2_xrc-2.8.a …
我正在尝试编写一个跨平台的GUI应用程序,该应用程序将部署到Windows,Mac OS X和Linux.我的要求是:
基于这些要求,我将工具包的选择范围缩小到了Qt和wxWidgets,因为我所知道的其他工具包(包括Java的Swing和SWT,Flex,AIR等)都没有满足"本机外观"的要求.需求.在这两个最终竞争者中,Qt似乎为我在所有三个部署平台上看起来和感觉都是原生的应用程序提供了更好的支持,但我愿意考虑相反的意见.
我宁愿不使用C++作为实现语言,但我不确定是否有任何实际的替代方案.我最担心的是使用C++以外的实现语言是部署问题.正如Ars Technica文章中所讨论的,PyQt在任何实际意义上都不符合"简单部署"的要求,我怀疑Qt的大多数其他语言绑定都会遇到相同的部署问题(至少在Mac OS X上). (或Scala)与QtJambi?QtRuby?wxPython?
有没有人知道满足上述三个要求的语言和工具包的任何组合?
我最近升级到了wxPython(wxPython 2.9.2.4)的开发版本,因为我需要在我的应用程序中使用wx.NotificationMessage的功能.由于我认为可能存在错误,我一直试图在某些用户事件上创建通知气泡失败.在提交此类错误之前,我想继续向邮件列表的人员询问他们认为可能存在的问题,并希望在我的代码中找到解决方案.
这是我用过的代码:
import wx, sys
app = wx.PySimpleApp()
class TestTaskBarIcon(wx.TaskBarIcon):
def __init__(self):
wx.TaskBarIcon.__init__(self)
# create a test icon
bmp = wx.EmptyBitmap(16, 16)
dc = wx.MemoryDC(bmp)
dc.SetBrush(wx.RED_BRUSH)
dc.Clear()
dc.SelectObject(wx.NullBitmap)
testicon = wx.EmptyIcon()
testicon.CopyFromBitmap(bmp)
self.SetIcon(testicon)
self.Bind(wx.EVT_TASKBAR_LEFT_UP, lambda e: (self.RemoveIcon(),sys.exit()))
wx.NotificationMessage("", "Hello world!").Show()
icon = TestTaskBarIcon()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
在我的Windows 7计算机上,代码会创建一个小的白色任务栏图标,并创建一个带有短语"Hello World!"的弹出窗口.问题?消息不在我的图标上.正在创建另一个图标,并将消息放在那里.见图:http://www.pasteall.org/pic/18068">
我认为这可能是因为我在第22行没有传递父参数:
wx.NotificationMessage("", "Hello world!").Show()
Run Code Online (Sandbox Code Playgroud)
以下是我将其更改为:
wx.NotificationMessage("", "Hello world!", self).Show()
Run Code Online (Sandbox Code Playgroud)
"self"指的是任务栏图标.当我这样做时,我收到一个错误:
Traceback (most recent call last):
File "C:\Python27\testnotificationmessage.py", line 24, in <module>
icon = TestTaskBarIcon()
File "C:\Python27\testnotificationmessage.py", line 22, in __init__
wx.NotificationMessage("", "Hello …Run Code Online (Sandbox Code Playgroud) 我是Python和WX的新手.我创建了一个如下所示的简单测试对话框,提示用户使用组合框.我想从主程序中的combox中捕获值.我如何从我的主程序中调用它?
这就是我打算调用它来显示对话框但目前没有从组合框中捕获值的方法:
import highlight
highlight.create(self).Show(True)
a = highlight.OnComboBox1Combobox(self)
print a
Run Code Online (Sandbox Code Playgroud)
Dialog文件的名称是"highlight".以下是代码:
#Boa:Dialog:Dialog2
import wx
def create(parent):
return Dialog2(parent)
[wxID_DIALOG2, wxID_DIALOG2COMBOBOX1, wxID_DIALOG2STATICTEXT1,
] = [wx.NewId() for _init_ctrls in range(3)]
class Dialog2(wx.Dialog):
def _init_ctrls(self, prnt):
# generated method, don't edit
wx.Dialog.__init__(self, id=wxID_DIALOG2, name='', parent=prnt,
pos=wx.Point(264, 140), size=wx.Size(400, 485),
style=wx.DEFAULT_DIALOG_STYLE, title='Dialog2')
self.SetClientSize(wx.Size(384, 447))
self.comboBox1 = wx.ComboBox(choices=['test1', 'test2'],
id=wxID_DIALOG2COMBOBOX1, name='comboBox1', parent=self,
pos=wx.Point(120, 16), size=wx.Size(130, 21), style=0,
value=u'wining\n')
self.comboBox1.SetToolTipString(u'comboBox1')
self.comboBox1.SetLabel(u'wining\n')
self.comboBox1.Bind(wx.EVT_COMBOBOX, self.OnComboBox1Combobox,
id=wxID_DIALOG2COMBOBOX1)
self.staticText1 = wx.StaticText(id=wxID_DIALOG2STATICTEXT1,
label=u'test', name='staticText1', parent=self, pos=wx.Point(88,
16), size=wx.Size(19, 13), style=0)
def …Run Code Online (Sandbox Code Playgroud) 我无法在网上找到有关如何使用此方法的任何示例.我认为这可能是我将使用的东西.有人能为我提供一个如何使用这种方法的例子吗?
我的目标是建立一个Game Boy模拟器.为此,我想将SDL2表面嵌入到wxWidgets窗口中.
我找到了这个教程:http://code.technoplaza.net/wx-sdl/part1/,但是我的程序一运行就崩溃了.但我怀疑这是针对SDL1.2的.该计划的一部分如下所示.
看来如果我调用SDL_Init()并尝试显示一个wxFrame(在本例中是MainWindow),它会显示一秒钟的窗口然后程序崩溃.到目前为止,我在程序中评论了对SDL的所有其他调用,所以看起来问题在于在wxFrame上调用Show()并在同一程序中启动SDL2.
所以问题是:SDL2和wxWidgets 3可以一起工作吗?如果没有,你们可以向我推荐一个Game Boy模拟器的GUI吗?wxWidgets是否有像Qt一样的自己的图形框架(我宁愿避免使用Qt)?
非常感谢!
#include "MainApp.h"
#include "MainWindow.h"
#include <stdexcept>
namespace GBEmu {
static void initSDL() {
//This and SDL_Quit() are the only calls to the SDL library in my code
if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
throw std::runtime_error("Fatal Error: Could not init SDL");
}
}
bool MainApp::OnInit()
{
try {
//If I comment out this line, the MainWindow wxFrame shows up fine.
//If I leave both uncommented, the window shows up quickly …Run Code Online (Sandbox Code Playgroud) 有没有办法将属性设置为按钮或向属性添加按钮?通过查看网格示例,我注意到您可以执行以下操作
wxPGEditor* editorButton = wxPropertyGrid::RegisterEditorClass(someButton);
propertyGrid->SetPropertyEditor(wxT("Name"), editorButton );
Run Code Online (Sandbox Code Playgroud)
但是,我想要有不同的按钮,而不仅仅是一种类型,这将支持。
编辑:通过不同的按钮,我的意思是不必依赖于使用编辑器的按钮。我想做的是设置一个 onClick 回调函数,就像通常为 wxButton 所做的那样,但将其设置为属性。
EDIT2:要明确的是,我希望属性字段本身只是一个按钮。