0

我想创建一个网格,用户可以在其中通过 wxchoice(或 wxcombo)控件更改列名。我想象它是这样的:例如让用户有数据的树列

John,Smith,190
Maria,Kowalsky,180

我想让用户将每一列与三个选项之一(名字、姓氏、身高)相匹配,我刚开始:

#!/usr/bin/python
# coding: utf-8

import wx
from wx.grid import Grid

class DocsVarValGrid(Grid):
    """
    """
    def __init__(self, parent, init_data=None, *args, **kwargs):
        super(DocsVarValGrid, self).__init__(parent, *args, **kwargs)
        self.CreateGrid(1, 1)


        self.cols_names = init_data

class MyFrame(wx.Frame):
    """"""
    def __init__(self, *args, **kwargs):
        super(MyFrame, self).__init__(*args, **kwargs)
        #self.panel = PickAFile(parent=self)
        self.grid = DocsVarValGrid(self, init_data=['a', 'b', 'c'])
        self.Layout()

def main():
    app = wx.App() # creation of the wx.App object (initialisation of the wxpython toolkit)
    frame = MyFrame(None, title="Hello World") # creation of a Frame with "Hello World" as title
    frame.Show() # frames are invisible by default so we use Show() to make them visible
    app.MainLoop() # here the app enters a loop waiting for user input

if __name__ == '__main__':
    main()
4

2 回答 2

0

你实际上不能那样做。相反,您必须自己绘制一个组合框。这是允许使用 GridLabelRenderer 混合的。至少,这就是 wxPython 演示中所暗示的内容。如果您还没有,我建议您下载它并查看那里的示例。在那个例子中它实际上没有组合框,但我认为它会让你继续前进。

于 2013-01-24T14:39:29.953 回答
0

可以使用 grid.GetGridColLabelWindow() 从网格中获取列标题窗口,然后您可以对该窗口执行任何操作,例如覆盖其绘制事件或在其上放置小部件。查看 wx.lib.mixins.gridlabelrenderer 模块中的一些帮助类,它们可以帮助您覆盖标签的绘制。

因此,虽然自己绘制一个类似组合框的东西是可行的,但在您的情况下,将一个真正的小部件放在那里可能是最有意义的。您必须自己管理其大小和位置,并在每次调整网格和/或列的大小时对其进行调整,但这应该不会太困难。如果您查看 gridlabelrenderer,您将能够看到一些计算代表每个标签的矩形的代码,您可以使用类似的东西来调整小部件的大小和重新定位。

于 2013-01-29T17:15:33.463 回答