我想创建一个网格,用户可以通过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()
答案 0 :(得分:0)
你实际上无法做到这一点。相反,你必须自己绘制一个组合框。使用GridLabelRenderer mixin允许这样做。至少,这就是wxPython演示中隐含的内容。如果您还没有,我建议下载并查看那里的示例。在这个例子中它实际上没有一个组合框,但我认为它会让你前进。
答案 1 :(得分:0)
可以使用grid.GetGridColLabelWindow()从网格中获取列标题窗口,然后您可以使用该窗口执行任何操作,例如覆盖其绘制事件或在其上放置小部件。请查看wx.lib.mixins.gridlabelrenderer模块,了解一些帮助您覆盖标签绘图的帮助程序类。
因此,尽管绘制类似于组合框的东西本身是可行的,但在你的情况下,将真正的小部件放在那里可能是最有意义的。您必须自己管理其大小和位置,并在每次调整网格和/或列时调整它,但它不应该太难。如果您查看gridlabelrenderer,您将能够看到一些代码来计算代表每个标签的矩形,您可以使用类似的东西来调整窗口小部件的大小和重新定位。