0

ユーザーが wxchoice (または wxcombo) コントロールで列名を変更できるグリッドを作成したいと思います。私はそれを次のように想像します:たとえば、ユーザーにデータのツリー列を持たせます

John,Smith,190
Maria,Kowalsky,180

ユーザーが各列を3つのオプション(名、姓、高さ)のいずれかに一致させたいのですが、私は非常に最初です:

#!/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 に答える