如何将wxChoice放在wxGrid标题中?

时间:2013-01-24 10:06:26

标签: header grid wxpython controls

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

John,Smith,190
Maria,Kowalsky,180

我想让用户将每列匹配到三个选项之一(firstname,lastname,height) 我刚刚开始:

#!/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()

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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