2010-08-12 96 views
0

我没有必要在很长一段时间内做任何GUI编程,所以我可能会在这里呆滞,所以如果这是一个愚蠢的问题,请耐心等待。我决定将wxPython用于一个小型的业余爱好项目,而且我在更改主窗口的背景颜色时遇到了问题。我在Snow Leopard上使用Python 2.6.2和wxPython 2.8.11.0。任何人都可以告诉我我在这里做错了什么?或者我偶然发现了某种错误?以下是一个演示该问题的小样本...wxPython SetBackgroundColour不能在OS X上工作

from wx import * 

class MainFrame(Frame): 
    def __init__(self, parent, title): 
     Frame.__init__(self, parent, title=title) 

     self.Maximize() 
     self.cdatabase = ColourDatabase() 
     self.SetBackgroundStyle(BG_STYLE_CUSTOM) 
     self.SetOwnBackgroundColour(self.cdatabase.Find('BLACK')) 
     self.Show(True) 
     self.ClearBackground() 


app = App(False) 
frame = MainFrame(None, 'a title') 
app.MainLoop() 
+1

615标记为wxpython,1(yours)标记为wx-python的问题,可能是一个好主意,可以更改 – volting 2010-08-12 23:39:18

+0

哈哈,好点。干杯。 – 2010-08-12 23:58:58

回答

1

与wxPython的要记住的一点是,在大多数情况下,它会包裹平台的本机部件它是。所以如果Linux上的框架不支持改变它的背景颜色,那么你不能仅仅使用框架。 (注:我不知道哪些平台wx.Frame支持bg颜色变化)

应始终包含wx.Panel以保持一致的外观和感觉以及获取Tab键以便在子窗口小部件上正常工作。如果您希望能够完全控制应用程序的各个方面,则需要使用不同的工具包。顺便说一下,wxPython中的许多核心控件都具有通用的对应物,它们都是用纯Python编写的,可以被黑客攻击来执行本机小部件所不能做的事情。

1

您对self.SetBackgroundStyle(BG_STYLE_CUSTOM)通话看来我的系统上会造成麻烦,而且你不需要为self.cdatabase = ColourDatabase()线都在我的测试。此代码的工作在我身边的事情:

from wx import * 

class MainFrame(Frame): 
    def __init__(self, parent, title): 
     Frame.__init__(self, parent, title=title) 
     self.Maximize() 
     self.SetOwnBackgroundColour('Black') 
     self.Show(True) 


app = App(False) 
frame = MainFrame(None, 'a title') 
app.MainLoop() 
+0

“BG_STYLE_CUSTOM”是我在明显的方法无效时尝试的。我只是再次删除它并尝试它,它仍然无法正常工作。但是,如果我添加一个填充框架并使面板的背景变黑的面板,它确实会起作用。奇怪... – 2010-08-12 22:59:48

+0

@Chinmay Kanchi - 面板的需求可能是平台特定的。我在XP 64位上。我记得在不同的地方阅读时,你需要一个面板来保证跨平台的一致性,所以也许这就解释了一些差异。 – 2010-08-12 23:02:45

+0

够公平的。啊跨平台工具包的乐趣...... – 2010-08-12 23:08:32