这里有一个关于在 WxPython 应用程序中嵌入 Vispy 的 SceneCanvas 的问题。如何调整 SceneCanvas 的大小以适合面板?并在调整窗口大小时再次调整大小?
你可以试试这段代码。如果最大化窗口,您会看到蓝色背景。OpenGL 画布的大小不会改变。
import wx
import vispy.scene as scene
class Canvas(scene.SceneCanvas):
def __init__(self, *a, **k):
scene.SceneCanvas.__init__(self, *a, **k)
view = self.central_widget.add_view()
view.bgcolor = '#ef00ef'
self.show()
class my_panel_1(wx.Panel):
def __init__(self, *a, **k):
wx.Panel.__init__(self, *a, **k)
self.SetBackgroundColour(wx.BLUE)
self.canvas = Canvas(app="wx", parent=self)
class my_panel_2(wx.Panel):
def __init__(self, *a, **k):
wx.Panel.__init__(self, *a, **k)
self.SetBackgroundColour(wx.GREEN)
a_text = wx.TextCtrl(self, pos=(10, 10))
a_button = wx.Button(self, -1, 'Hello Word', pos=(10, 50))
class MyFrame(wx.Frame):
def __init__(self, *a, **k):
wx.Frame.__init__(self, *a, **k, title="Title", size=(800, 600))
box = wx.BoxSizer(wx.HORIZONTAL)
panel1 = my_panel_1(self)
box.Add(panel1, 1, wx.EXPAND)
box2 = wx.BoxSizer(wx.VERTICAL)
box.Add(box2, 0, wx.EXPAND)
panel2 = my_panel_2(self)
box2.Add(panel2, 1, wx.EXPAND)
self.SetAutoLayout(True)
self.SetSizer(box)
self.Layout()
if __name__ == '__main__':
app = wx.App(False)
frame = MyFrame(None)
frame.Show(True)
app.MainLoop()
如果有用,我的配置是:
- Linux 丽贝卡
- Python 3.6.4
- WxPython 4.0.1
- 维斯比 0.6.0