我如何使用 GridSizer 在 WxPython 中调整小部件的大小
How do i resize a widget in WxPython using GridSizer
介绍与问题
我制作了一个 gridsizer 来调整框架本身的大小。
但是由于 gridsizer 如果我使用 WX_EXPAND
标志(当我使用 self.Layout()
刷新应用程序大小时让它们具有新的高度和宽度)它们不会调整大小我给他们的屏幕百分比(我把空白小部件放在我想要的地方)。
示例here
我试过的
我试过制作 wx.GridBagSizer
但我不明白为什么它总是说 GenericTreeCtrl 不存在(我必须需要这棵树)所以我想问一个方法使用 wx.GridSizer
.
执行此操作
我想使用类似的东西并能够调整我的小部件的大小:what I want to be resizable
问题
能否请您告诉我使用 wx.GridSizer
动态调整小部件大小的正确和最佳方法是什么?
class mainPanel(wx.Panel):
def __init__(self, parent, pageNum, FrameSize):
self.parent = parent
self.pageNum = pageNum
wx.Panel.__init__(self, parent=parent)
Sizer = wx.GridSizer(6,6,0,0)
self.PathList = []
self.PathSelected = []
self.pastePath = ""
self.SetSizer(Sizer)
#tree
widthA,heightA = FrameSize[0],FrameSize[1]
path = "/media/" + os.getlogin()
self.folder_tree_project = wx.GenericDirCtrl(self, wx.ID_ANY,path, (0,0), wx.Size(widthA*0.3,heightA*0.75),wx.FULL_REPAINT_ON_RESIZE|wx.DIRCTRL_MULTIPLE)
Sizer.Add(self.folder_tree_project,0,wx.LEFT,0)
self.t1 = self.folder_tree_project.GetTreeCtrl()
self.folder_tree_project.ShowHidden(False)
self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelect,id=self.t1.GetId())
self.Bind(wx.EVT_SIZE, self.OnResize)
#--------------------------------------------------------
def OnResize(self,event):
FrameSize = self.GetSize()
self.Sizer.Layout()
试试这个
def OnResize(self,event):
FrameSize = self.GetSize()
widthA,heightA = FrameSize[0],FrameSize[1]
self.folder_tree_project.SetSize((int(widthA*0.3),int(heightA*0.75)))
self.Sizer.Layout()
我无法测试莱昂纳多,但感谢您的回复! (我没有回答是因为我参加了 Global Game Jam)
感谢另一个论坛上的某人,我找到了另一种方法,使用应用程序 'WxGlade' 我能够理解 GridBagSizer 的工作原理。
你不能在 WxGlade 中做像 GenericDirCtrl 这样的事情,但我已经阅读了它给出的代码,方法是像我想要的那样放置按钮和空白文本,并放置 gridbagsizer,通过预可视化和生成的代码,我能够理解 GridBagSizer 是如何工作的。
介绍与问题
我制作了一个 gridsizer 来调整框架本身的大小。
但是由于 gridsizer 如果我使用 WX_EXPAND
标志(当我使用 self.Layout()
刷新应用程序大小时让它们具有新的高度和宽度)它们不会调整大小我给他们的屏幕百分比(我把空白小部件放在我想要的地方)。
示例here
我试过的
我试过制作 wx.GridBagSizer
但我不明白为什么它总是说 GenericTreeCtrl 不存在(我必须需要这棵树)所以我想问一个方法使用 wx.GridSizer
.
我想使用类似的东西并能够调整我的小部件的大小:what I want to be resizable
问题
能否请您告诉我使用 wx.GridSizer
动态调整小部件大小的正确和最佳方法是什么?
class mainPanel(wx.Panel):
def __init__(self, parent, pageNum, FrameSize):
self.parent = parent
self.pageNum = pageNum
wx.Panel.__init__(self, parent=parent)
Sizer = wx.GridSizer(6,6,0,0)
self.PathList = []
self.PathSelected = []
self.pastePath = ""
self.SetSizer(Sizer)
#tree
widthA,heightA = FrameSize[0],FrameSize[1]
path = "/media/" + os.getlogin()
self.folder_tree_project = wx.GenericDirCtrl(self, wx.ID_ANY,path, (0,0), wx.Size(widthA*0.3,heightA*0.75),wx.FULL_REPAINT_ON_RESIZE|wx.DIRCTRL_MULTIPLE)
Sizer.Add(self.folder_tree_project,0,wx.LEFT,0)
self.t1 = self.folder_tree_project.GetTreeCtrl()
self.folder_tree_project.ShowHidden(False)
self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelect,id=self.t1.GetId())
self.Bind(wx.EVT_SIZE, self.OnResize)
#--------------------------------------------------------
def OnResize(self,event):
FrameSize = self.GetSize()
self.Sizer.Layout()
试试这个
def OnResize(self,event):
FrameSize = self.GetSize()
widthA,heightA = FrameSize[0],FrameSize[1]
self.folder_tree_project.SetSize((int(widthA*0.3),int(heightA*0.75)))
self.Sizer.Layout()
我无法测试莱昂纳多,但感谢您的回复! (我没有回答是因为我参加了 Global Game Jam) 感谢另一个论坛上的某人,我找到了另一种方法,使用应用程序 'WxGlade' 我能够理解 GridBagSizer 的工作原理。 你不能在 WxGlade 中做像 GenericDirCtrl 这样的事情,但我已经阅读了它给出的代码,方法是像我想要的那样放置按钮和空白文本,并放置 gridbagsizer,通过预可视化和生成的代码,我能够理解 GridBagSizer 是如何工作的。