我在Autodesk Maya中开发工具.我构建的许多工具都有简单的窗口GUI,供动画师和建模人员使用.这些GUI通常包含您通常希望在任何基本窗口中看到的内容; 标签,列表,菜单,按钮,文本字段等.但是,您可以使用可用工具构建的UI的复杂性存在限制,特别是在可用小部件的类型中.
我有兴趣使用一些更高级的wxPython小部件,如ListView(网格),树等.这将涉及使用完整的wxFrame(窗口)来显示整个UI,这实际上意味着窗口将不再被绑在玛雅身上.不是交易破坏者,但这意味着当Maya被最小化时,窗口将不会跟随.
我之前尝试使用tkinter作为测试,但发现它需要MainLoop才能在自己的线程中运行.这是合乎逻辑的,但在我的情况下,它与Maya自己的线程冲突,基本上使Maya挂起,直到窗口关闭.这是因为Maya在主Maya GUI共享的单个线程中运行所有脚本,无论是MEL还是Python.这是为了防止一个脚本在另一个脚本尝试对同一个对象进行操作时删除一个对象.
wxPython具有相同的"mainloop"方法.我想知道它是否有任何解决方法,以便它可以在Maya中工作?
当我关闭auinotebook中的标签时会使用什么事件?我用EVT_AUINOTEBOOK_PAGE_CLOSE(D)进行了测试.它没用.
我还要右键单击选项卡本身事件.
我在哪里可以找到可以与aui manager/notebook一起使用的所有事件?可能只是我糟糕的搜索技能,但我找不到存在的不同事件的任何列表,也不能找到鼠标/窗口事件.拥有一份完整的清单真的很方便.
#!/usr/bin/python
#12_aui_notebook1.py
import wx
import wx.lib.inspection
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
self.nb = wx.aui.AuiNotebook(self)
self.new_panel('Page 1')
self.new_panel('Page 2')
self.new_panel('Page 3')
self.nb.Bind(wx.EVT_AUINOTEBOOK_PAGE_CLOSED, self.close)
def new_panel(self, nm):
pnl = wx.Panel(self)
pnl.identifierTag = nm
self.nb.AddPage(pnl, nm)
self.sizer = wx.BoxSizer()
self.sizer.Add(self.nb, 1, wx.EXPAND)
self.SetSizer(self.sizer)
def close(self, event):
print 'closed'
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, '12_aui_notebook1.py')
frame.Show()
self.SetTopWindow(frame)
return 1
if __name__ == "__main__":
app = MyApp(0)
# wx.lib.inspection.InspectionTool().Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
Oerjan Pettersen
我需要为Linux(SDL)应用程序实现一个简单的图形消息框,类似于C++中的Windows MessageBox(gcc/g ++ 4.4.0).它需要做的只是显示标题,消息和确定或关闭按钮,并在单击该按钮时返回到调用功能.
SDL只使用X(11)打开(OpenGL)渲染窗口.
我查看了一个关于GTK实现的类似线程,但该实现似乎无法正常工作.
我也尝试了wxWidgets的wxMessageBox函数,但编译头文件会使编译器在include/c ++/4.4.0/bits/stl_algobase.h(openSuSE 11.1 32位上的gcc 4.4.0 32位)中抛出有关语法错误的错误消息.使用wxWidgets还意味着必须链接大量的库,将STL添加到我的应用程序(否则不需要)以及谁知道还有什么,所以我不想使用wxWidgets.
X11/motif(openmotif)有我需要的东西(XmCreate {Error | Warning | InfoDialog),但是这些需要一个我没有的父窗口小部件(例如顶层窗口),并且不接受这些的NULL参数.
所以我现在很难过.有一种简单的方法可以做我想要的吗?或者至少有一半的简单/简单/直接的?如果是,哪一个(尽可能多地提供详细信息将受到高度赞赏).
我正在尝试编译wxwidgets.我正在使用mingw32编译并遵循zip文件附带的install.txt,但是当我编译它时,它会给我这些错误.
if not exist gcc_mswd mkdir gcc_mswd process_begin: CreateProcess(NULL, -c "if not exist gcc_mswd mkdir gcc_mswd", ...) failed. make (e=2): The system cannot find the file specified. mingw32-make: [gcc_mswd] Error 2 (ignored) if not exist ..\..\lib\gcc_lib mkdir ..\..\lib\gcc_lib process_begin: CreateProcess(NULL, -c "if not exist ..\..\lib\gcc_lib mkdir ..\..\lib\gcc_lib", ...) failed. make (e=2): The system cannot find the file specified. mingw32-make: *** [..\..\lib\gcc_lib] Error 2
任何帮助表示赞赏.
PS:我正在使用mingw32-make,如果这有所作为.
在 wxWindow的:: GetHandle()函数返回HWND在Windows和GtkWidget的Linux操作系统.我需要获得X11 Window Handle,这不是小部件本身.如何从该窗口小部件获取句柄?我需要C++代码,因为它是wxWidgets的主要语言.
我正在编写一个wxPython应用程序,当我尝试更改StaticText对象中的文本时,我设置的对齐就消失了.它从中心开始,但在文本更改后,对齐将返回默认的左对齐.这是我的相关代码:
#initializing
self.panel = wx.Panel(self)
self.st_RouteInfo = wx.StaticText(self.panel, label=self.route_start, style=wx.ALIGN_CENTRE)
#changing StaticText
self.st_RouteInfo.SetLabel("Put text here")
self.Update()
Run Code Online (Sandbox Code Playgroud)
我猜我忘记了一些基本的东西,因为我是wxPython和wxWidgets的新手.谢谢!
我正在用wxPython和VTK创建一个应用程序.屏幕左侧有一个配置面板(wx.Panel),右侧有一个VTK窗口,也基于wx.Panel.将面板放置在wxFrame的boxsizer中,并使用wxFormBuilder应用程序中定义的比例大小调整大小,然后使用该大小来生成XRC文件.

我有一个非常具体的问题,一些Windows 7机器一直没有正确调整窗口的VTK部分 - 请参阅上面屏幕截图中VTK窗口周围的白色边框.我试图让这个VTK窗口固定为1280x720 - 它是 - 但是有一个尺寸问题,一些元素正在切断窗口的底部和右边.在Ubuntu 10.04,XP或Windows 7的某些版本上运行时,此错误不存在(我不确定那些有效的和那些尚未有效的内容是什么).
当遇到这个错误时,我可以与屏幕的白色部分进行交互 - 通过VTK交互器正确处理点击,因此它仍然是我的VTK场景的一部分.
应用程序设置如下,右侧VTK窗格是graphics_panel.面板设置为wxEXPAND没有其他标志,我的应用程序中的所有元素都自动设置为大小(没有设置最小,最大或默认大小).唯一的例外是bSizer1(主要的wxFrame sizer),它具有最小宽度和高度设置(我不确定这是否是正确的方法,但它似乎工作正常).

我从wxFormBuilder生成XRC,然后在我的应用程序中使用它,我的VTK场景设置如下:
class MyScene(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, style=wx.NO_BORDER)
#'parent' is main_frame (wx.Frame instance)
self._parent = parent
self.renderer = vtk.vtkRenderer()
# I create and add my VTK actors here (SNIPPED)
self._set_lighting()
self.widget = VTKWidget(self,-1) #VTKWidget is a wxVTKRenderWindowInteractor
self.widget.GetRenderWindow().AddRenderer(self.renderer)
self.widget.Enable(1)
self.widget.SetDoubleBuffered(True)
self.Bind(wx.EVT_SIZE, self.on_size)
Run Code Online (Sandbox Code Playgroud)
我一直在尝试解决使用该on_size函数的元素大小的MyScene问题,但下面没有任何内容可以解决我的问题.报告的数值都正常的和错误的系统是符合市场预期.
def on_size(self, evt):
print "---- MyScene on_size ----"
print "Widget …Run Code Online (Sandbox Code Playgroud) 我之前从未使用过wxWidgets,我很想尝试一下,但是我已经遇到了一百万个问题.
我在Visual Studio 2010上使用wxWidgets 2.9.1.我已经完成了批量构建,以在每个配置中构建每个项目.
我已将include和lib引用添加到我的项目中.
当我尝试编译简单的"Hello,World!"时 程序,我收到此错误:
Error 1 error C1083: Cannot open include file: '../../../lib/vc_lib/msw/wx/setup.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)
我检查了我的lib/vc_lib文件夹,确实没有找到"msw"文件夹.只有"mswu","mswud","mswunivu"和"mswunivd".
有谁知道发生了什么?:/
如何设置Vertical BoxSizer的差距?Vertival BoxSizer中的相似或替代方法SetVGap(在GridSizer中设置sizer中单元格之间的垂直间隙(以像素为单位))是什么?
我正在使用C++创建一个wxWidget应用程序,在程序开始时我希望应用程序窗口包含具有随机颜色的像素,如下所示:
在上面的应用程序中有3600像素(60 x 60),我通过使用给每个像素一个随机的RGB颜色 uniform_int_distribution
使用我的代码中的以下函数生成上图中像素的颜色:
void random_colors(int ctable[][3], int n)
{
// construct a trivial random generator engine from a time-based seed:
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine generator (seed);
std::uniform_int_distribution<int> distribution(0,255);
for(int i=0; i<n; i++)
{
for(int j=0; j<3; j++)
{
ctable[i][j] = distribution(generator);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做的方法是给这个函数一个尺寸为3600 x 3的表,这个函数将填充颜色的值.
然而这种方式不是我想要的.我想要的是创建一个类somNode,其中每个somNode-object代表图片中的一个像素(RGB值作为成员数组属性).在这个somNode类中,我有一个成员函数,uniform_int_distribution用于在构造每个somNode自己的随机RGB颜色时给出.这是为每个创建随机颜色的功能somNode:
void rand_node_colour(int nodeWeights[])
{
// construct a trivial random generator engine from a time-based seed:
unsigned …Run Code Online (Sandbox Code Playgroud)