【问题标题】:How do i resize a widget in WxPython using GridSizer如何使用 GridSizer 在 WxPython 中调整小部件的大小
【发布时间】:2021-04-30 08:18:53
【问题描述】:

介绍与发行

我制作了一个 gridsizer 来调整我的框架本身的大小。

但是由于gridsizer,如果我使用WX_EXPAND 标志(当我使用self.Layout() 在调整应用程序大小时刷新时让它们具有新的高度和宽度)它们不会调整屏幕的百分比我给了他们(我把空白小部件放在我想要的地方)。

例如here

我的尝试

我试图创建一个wx.GridBagSizer,但我不明白为什么它总是说 GenericTreeCtrl 不存在(我必须需要这棵树)所以我想用 @ 来做这件事987654328@.

我想使用类似的东西并能够调整我的小部件的大小: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()

【问题讨论】:

  • 是的,它不会调整我的小部件的大小,它们仍然是相同的 (cdn.discordapp.com/attachments/468077116123250689/…) 它在我的笔记本中,framesize 用于根据 wich 小部件为小部件大小提供其大小的 %。
  • 您能否发布您的代码或发生问题的最小可重现示例?
  • cdn.discordapp.com/attachments/468077116123250689/… 这样好吗?我忘了移动它,但我也使用 self.SetSizer(sizer)
  • 请不要张贴照片或代码链接,在你的问题中写成一个sn-p
  • 它没有改变他们保持初始大小,也很奇怪能够调整应用程序大小我只需要在框架初始化中做一个 self.Layout(当我调用 OnResize 时)

标签: python python-3.x user-interface wxpython sizer


【解决方案1】:

试试这个

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()

【讨论】:

    【解决方案2】:

    我无法测试它 Leonardo 但感谢您的回复! (因为我参加了 Global Game Jam,所以我没有回答) 感谢另一个论坛上的某个人,我找到了另一种方法,使用应用程序“WxGlade”我能够理解 GridBagSizer 的工作原理。 您不能在 WxGlade 中执行 GenericDirCtrl 之类的操作,但我已经阅读了它给出的代码,方法是放置我想要的按钮和空白文本并放置 gridbagsizer,通过预可视化和生成的代码,我能够理解 GridBagSizer 的工作原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-12
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多