【问题标题】:Is it possible to adapt width wx.StaticBox?是否可以调整宽度 wx.StaticBox?
【发布时间】:2018-12-10 17:11:24
【问题描述】:

我已经编写了这个代码:

import wx
import List as li
from ChoiceBook import *

class MainTab(wx.Panel):
   def __init__(self, parent, sb, dm):
    wx.Panel.__init__(self, parent)
    self.parent = parent
    self.hardware = []
    box = wx.StaticBox(self, wx.ID_ANY, "Appareil")
    self.list = li.List(self, sb, dm)
    sizerleft = wx.StaticBoxSizer(box,wx.HORIZONTAL)
    sizerleft.Add(self.list, 1, wx.ALL|wx.EXPAND, 5)




    box = wx.StaticBox(self, wx.ID_ANY, "Mesures")
    self.notebook = Choicebook(self,dm)

    sizerright = wx.StaticBoxSizer(box,wx.HORIZONTAL)
    sizerright.Add(self.notebook, 1, wx.ALL|wx.EXPAND, 5)



    sizer = wx.BoxSizer(wx.HORIZONTAL)
    sizer.Add(sizerleft, 1, wx.ALL|wx.EXPAND, 5)
    sizer.Add(sizerright, 1, wx.ALL|wx.EXPAND, 5)
    self.SetSizer(sizer)

   def update(self):
       self.notebook.update() 

这是window,但是当我调整它的大小时,它不会缩放内容。它只是裁剪它,比如this

我认为问题来自我猜是静态的 StaticBox(我不确定)。

我想知道是否可以让它自动调整大小?

或者如果没有,是否有另一种方法可以制作带有像 StaticBox 这样的标题的框,从而使其可调整大小?

编辑:我在你的帮助下弄清楚了。事实上,这不是鳕鱼故障的这一部分,而是我的清单类。我只是删除该文件中的所有大小 之前

wx.ListCtrl.__init__(self,
                         parent,
                         size=(800, -1),
                         style=wx.LC_REPORT | wx.LC_SINGLE_SEL)
    self.rm = RM.Res_Man()
    self.index = 0

    self.InsertColumn(0, 'Appareil de mesure', width=125)
    self.InsertColumn(1, 'Connecté')
    self.InsertColumn(2, 'ID',width=300)
    self.InsertColumn(3, 'Type',width=290)
    self.sb = sb

之后

wx.ListCtrl.__init__(self,
                         parent,
                         style=wx.LC_REPORT | wx.LC_SINGLE_SEL)
    self.rm = RM.Res_Man()
    self.index = 0

    self.InsertColumn(0, 'Appareil de mesure')
    self.InsertColumn(1, 'Connecté')
    self.InsertColumn(2, 'ID')
    self.InsertColumn(3, 'Type')
    self.sb = sb

谢谢大家;)

【问题讨论】:

  • 这可能是本机系统行为。您可以尝试不使用 wxStaticBox 进行测试吗?
  • 对不起,在我看来,您发布的代码与这些图像不匹配。也许您想发布真正的代码。 Appart 从那,我看不出任何尺寸大小的问题,所有子窗口都应该按相同的比例调整大小。
  • 仅供参考:“静态”表示它不生成任何事件(不像按钮、复选框等),它确实意味着它可以' t 改变大小。

标签: python user-interface wxpython wxwidgets


【解决方案1】:

我认为你想要的是在 RESIZE 事件上强制它到 Layout()
但是,请记住,这些项目有最小尺寸。

试试这个:

import wx

class MainTab(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        self.hardware = []
        box = wx.StaticBox(self, wx.ID_ANY, "Appareil")
        lc = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_REPORT|wx.LC_SINGLE_SEL|wx.LC_VRULES)
        lc.InsertColumn(1, "Appareil de mesure")
        lc.InsertColumn(2, "Connecte")
        lc.InsertColumn(3, "ID")
        lc.InsertColumn(4, "Type")
        sizerleft = wx.StaticBoxSizer(box,wx.HORIZONTAL)
        sizerleft.Add(lc, 1, wx.ALL|wx.EXPAND, 5)

        box = wx.StaticBox(self, wx.ID_ANY, "Mesures")
        cb = wx.Choicebook(self, wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize,
               style=0, name="")

        sizerright = wx.StaticBoxSizer(box,wx.HORIZONTAL)
        sizerright.Add(cb, 1, wx.ALL|wx.EXPAND, 5)

        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(sizerleft, 1, wx.ALL|wx.EXPAND, 5)
        sizer.Add(sizerright, 1, wx.ALL|wx.EXPAND, 5)
        self.SetSizer(sizer)
        self.Bind(wx.EVT_SIZE, self.ReSize)

    def ReSize(self,event):
        self.Layout()

if __name__ == '__main__':
    app = wx.App()
    frame = MainTab()
    frame.Show(True)
    app.MainLoop()

由于您的代码已完成,我不得不将它一起破解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2011-12-06
    • 2020-03-30
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多