0

我正在构建一个小型 wxPython 应用程序,其作用是在 wxGrid 中显示 Clearquest 信息。网格的父级是一个面板,面板的父级是一个笔记本。每次单击按钮时,我都会创建一个新页面,获取我的信息并显示它们。到现在为止还挺好。

我的问题是,当我滚动到网格底部时,有一个我想去掉的水平空白区域。谁能告诉我是否有办法删除它?

这是一张有助于理解我的问题的图片。我想摆脱红色矩形中的空白。

编辑:如下所示,这里有一些关于如何定义尺寸器的精度:如您所见,窗口分为两部分: - 左侧部分专用于笔记本。笔记本的每个选项卡都是一个面板,其中 wx.Grid 用于显示我的数据 - 右侧部分专用于触发数据检索的按钮(它是一个静态框)。

首先,我声明了设置面板的框架,该面板将包含笔记本和按钮的静态框(我只显示一个按钮的代码,其他按钮无关紧要):

class MainFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, parent=None, title='ClearQuest Python Edition')
        self.queryHandler = CQHandler.QueryHandler()
        panel = wx.Panel(self)
        queryButtonsBox = wx.StaticBox(panel, -1, 'Run queries')
        queryButtonsSizer = wx.StaticBoxSizer(queryButtonsBox, wx.VERTICAL)
        queryButtonDAS = wx.Button(panel, label="DAS", name="1")
        queryButtonsSizer.Add(queryButtonDAS, flag=wx.TOP | wx.EXPAND, border = 5)
        queryButtonDAS.Bind(wx.EVT_BUTTON, self.QueryButtonClick)
        self.noteBook = MyNoteBook(panel)
        HBox = wx.BoxSizer(wx.HORIZONTAL)
        HBox.Add(self.noteBook, 1, wx.EXPAND, 0)
        HBox.Add(queryButtonsSizer, 0, wx.ALL, 5)
        panel.SetSizer(HBox)

以下是笔记本和笔记本的每个选项卡的声明和调用方式:

class MyNoteBook(wx.Notebook):

    def __init__(self, parent):
        wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=wx.BK_DEFAULT)

    def AddQueryPanel(self, title):
        newTab = TabPanel(self)
        self.AddPage(newTab, title, True)
        self.CurrentPage.dataGrid.ForceRefresh()


class TabPanel(wx.Panel):

        def __init__(self, parent):
            wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
            self.dataGrid = MainGrid(self)
            horizontalSizer = wx.BoxSizer(wx.HORIZONTAL)
            horizontalSizer.Add(self.dataGrid, 1, wx.EXPAND | wx.ALL, 0)
            self.SetSizer(horizontalSizer)

最后,我的 MainGrid 的一个小样本,如果有帮助的话:

class MainGrid(GridLib.Grid):

    def __init__(self, parent):
        self.queryHandler = CQHandler.QueryHandler()
        self.GetQueryInfo()
        self.style = GUI.Style.StyleHandler()
        GridLib.Grid.__init__(self, parent)
        self.SetGridLineColour("black")
        self.SetRowLabelSize(25)
        self.SetDefaultRowSize(20)
        self.CreateGrid(self.numberOfRows, self.NumberOfColumns)
        self.ConfigureEvents()
        for i in range(self.NumberOfColumns):
            self.SetColLabelValue(i, self.Headers[i])
        self.EnableEditing(False)
        self.CRList = self.queryHandler.GetCRList()
        self.DisplayCR()
4

2 回答 2

0

尺寸器是如何应用的?需要有关代码的一些详细信息。

于 2013-08-09T21:19:51.577 回答
0

对于其他试图这样做的人,我想出了一个解决方案。这直接来自我的程序,因此您可以根据需要进行调整。大小调整器可防止面板大于网格本身。我用下陷的边框来隐藏你从隐藏标签中得到的线条。

任何问题?

def add_grid(self, num_rows, num_cols, labels = None, grid_labels = None, 
             panel_colour = MainWindow.right_panel_color):

    grid_panel = BuildPanel(self, BackColour = None, Border = wx.SUNKEN_BORDER)

    grid_to_add = wx.grid.Grid(grid_panel)

    if grid_labels is None:
        grid_to_add.SetColLabelSize(0)
        grid_to_add.SetRowLabelSize(0)

    grid_to_add.CreateGrid(num_rows, num_cols)

    total_grid_size = 350
    min_size = total_grid_size/num_cols

    for cols in range(0, num_cols):

        grid_to_add.SetColMinimalWidth(cols, min_size)
        grid_to_add.SetColSize(cols, min_size)

    grid_to_add.SetMargins(0 - wx.SYS_VSCROLL_X, 0 - wx.SYS_HSCROLL_Y)
    grid_to_add.ForceRefresh()

    grid_to_add.SetDefaultCellBackgroundColour(panel_colour)
    for row in range(0, num_rows):
        for col in range(0, num_cols):
            grid_to_add.SetCellBackgroundColour(row, col, wx.WHITE) #None)

    vertical_sizer = wx.BoxSizer(wx.VERTICAL)
    vertical_sizer.Add(grid_to_add, 1, wx.ALL, 0)
    grid_panel.SetSizerAndFit(vertical_sizer)


    h_sizer = wx.BoxSizer(wx.HORIZONTAL)
    h_sizer.AddStretchSpacer(1)
    h_sizer.Add(grid_panel, 0)
    h_sizer.AddStretchSpacer(1)

    return [h_sizer, grid_to_add]
于 2014-07-31T20:35:29.817 回答