我使用的是python2.7和wxpython的最新版本。在
我需要并排放置两个网格,并能够动态添加行。理想情况下,网格的大小应该是动态增长的,但是“足够大”的大小目前应该可以。在
我应该如何更改(和简化)我的代码来实现这一点?在
class MatricesFrame(wx.BoxSizer):
def __init__(self, parentPanel):
super(MatricesFrame, self).__init__(wx.HORIZONTAL)
self.outputsMatrix = self.addEmptyGrid(parentPanel)
self.inputsMatrix = self.addEmptyGrid(parentPanel)
addRowsButton = wx.Button(parentPanel, -1, " Add Rows")
addRowsButton.Bind(wx.EVT_BUTTON, self.addRows)
self.Add(addRowsButton)
def initResize(self, ev = None):
self.inputsMatrix.SetSize((500, 500))
self.outputsMatrix.SetSize((500, 500))
def addEmptyGrid(self, parentPanel):
panel_ = wx.Panel(parentPanel)
sizer_ = wx.BoxSizer(wx.VERTICAL)
panel_.SetSizer(sizer_)
panel_.SetSize((500, 500))
matrix_ = wx.grid.Grid(panel_)
matrix_.SetRowLabelSize(0)
matrix_.SetColLabelSize(0)
matrix_.CreateGrid(1,1)
sizer_.Add(matrix_)
self.Add(panel_)
return matrix_
def addRows(self, ev=None):
self.inputsMatrix.appendRows(1)
self.outputsMatrix.AppendRows(1)
class TestFrame(wx.Frame):
def __init__(self, parent):
super(TestFrame, self).__init__(parent, title='test', size=(1280, 950))
panel = wx.Panel(self)
box = wx.BoxSizer(wx.VERTICAL)
self.matricesFrame = MatricesFrame(panel)
box.Add(self.matricesFrame)
panel.SetSizer(box)
self.matricesFrame.initResize()
self.Centre()
self.Show()
self.matricesFrame.initResize()
wx.EVT_IDLE(wx.GetApp(), wx.WakeUpIdle())
def main():
app = wx.App(False)
t= TestFrame(None)
app.MainLoop()
if __name__ == '__main__':
main()
对于初学者来说,如果你把你的自定义尺寸转换成一个自定义面板,我认为这会使你的代码更容易控制。看看我想出了什么
使用面板而不是Sizer可以极大地简化“addEmptyGrid”方法,而且现在可以尝试使用面板的大小来设置矩阵的大小,而不是矩阵本身的大小。此外,这允许您灵活地从wx.面板到wx.lib.滚动面板.ScrolledPanel,如果要添加滚动条(如果添加了很多行,则为)。在
然后可以按如下方式初始化新面板:
^{pr2}$最后,据我所知,网格中的列有固定的宽度,所以矩阵.SetSize(500000)电话没什么用。如果可以找到设置列宽度的方法,那么我建议您重写initResize()来设置相对于面板宽度的宽度。在
相关问题 更多 >
编程相关推荐