3

たとえば、列に非常に重要なフラグを立てることができるグリッド アプリケーションがあります。これが完了したら、使用Grid.SetColAttrして列の色を変更します。ただし、ユーザーがフラグを削除すると、SetColAttr. None属性オブジェクトの代わりにもう一度呼び出すと、Python が不思議なことにエラー メッセージなしでクラッシュし、すべてのセルを反復して呼び出しSetAttr(row, col, None)ても列の色に影響しません。これは、列の属性がセルの属性をオーバーライドするためだと思いますNone

では、セル属性の変更を元に戻すにはどうすればよいですか? 「デフォルト」のグリッド属性で呼び出す必要があると思いますがSetColAttr、グリッドにデフォルトのセル属性があるかどうか、またはそれを取得する方法さえわかりません。

4

2 に答える 2

1

問題はSetColAttrandSetRowAttrだけです。SetAttr(row,col,None)動作します(個々のセルをリセットします)。ただし、これらの属性は異なるリスト (セル/行/列) に格納されるためSetAttr()、列または行の属性には影響しません。

内部的に、指定されたパラメーターwxGridTableBase::SetColAttr()に属性の種類 ( ) を割り当てようとしwxGridCellAttr::SetKind()ます。の場合None、None オブジェクト (実際にはヌル ポインター) でメソッドを呼び出そうとすると、クラッシュが発生します。

SetColAttr()を直接呼び出すことで、その割り当てをバイパスできますwxGridCellAttrProvider(これにより、有効な GridCellAttrProvider のチェックもバイパスされ、属性キャッシュはクリアされません)。

self.grid.GetTable().GetAttrProvider().SetColAttr(None,column)

これにより、属性キャッシュにトレースが残り、セルがリセットされないことがあります。キャッシュをクリアするには、次を呼び出しますSetAttr()

self.grid.SetAttr(-1,-1,None) # use invalid coordinates
于 2013-01-09T02:01:49.193 に答える
0

デフォルトのセルの背景色とテキストの色とフォント(GetDefaultCellFont、GetDefaultCellBackgroundColourなど)を取得し、それに基づいて設定できます。ただし、列のデフォルト属性を取得するための情報が見つかりません。セルのデフォルトを取得することで、それらを使用して列のデフォルトを設定できます。

私はまた、ある種の関連性があり、それを理解するのに役立つかもしれないこのきちんとした答えを見つけました:

wxpythonグリッドセルの背景色をフェードイン/フェードアウトします

また、wxPythonwikiのwxGridwikiページも読む必要があります:http ://wiki.wxpython.org/wxGrid

于 2013-01-08T22:24:59.583 に答える