0

ゼロからの BoxSizerチュートリアルの適切なアドバイスに従って、コードをリファクタリングして、wx.LEFT/RIGHT/TOP/BOTTOM フラグを「スペーサー」に分解しています。

horizontal_sizer.Add(someControl, 0, wx.LEFT, border)

になります:

horizontal_sizer.Add((border, 0))
horizontal_sizer.Add(someControl)

上記の場合、それらは完全に同等であると確信しています。ただし、wx.EXPANDゼロ以外の比率が次のように指定されている場合:

horizontal_sizer.Add(someControl, proportion, wx.LEFT | wx.EXPAND, border)

これは以下ですか:

horizontal_sizer.Add((border, 0))
horizontal_sizer.Add(someControl, proportion, wx.EXPAND)

上記と完全に同等ですか?視覚的には同じように見えますが、欠けているものはありますか? 言い換えればwx.EXPAND、国境に影響を与えますか? はいの場合、どのように?

もちろん、上記の例は些細なことですが、複雑なサイザー レイアウトでは、上記の変換 (チュートリアルで提案されているように) により、コードが大幅に簡素化され、一般的な UI パターンが際立ちます。これは、OR されたフラグと数字の混乱では単純に判読できませんでした。

編集:スペーサーを追加する正しい方法に関するフィードバックをいただければ幸いです。たとえば、私はここで見ました:

mainSizer.Add(wx.StaticText(self), 0, wx.EXPAND)  # add a "spacer"

または私が維持しているコードでは、人々は次のことを行っています。

horizontal_sizer.Add((0, 0), 1) # which seems equivalent to Add((0, 0))

現在、Pythonには1つ、できれば1つだけの明白な方法があるはずです-ここでは少なくとも4つがあります-専門家のフィードバックを歓迎します.

4

1 に答える 1

1

はい、比率の値とwx.EXPANDフラグは、ウィジェットと同じようにスペーサーに適用されます。アイテムの最小サイズは、(通常のようにウィジェットのプロパティではなく) スペーサーを追加するときに指定されたサイズである必要があります。拡張可能なサイザーを使用して、適切にサイズ変更されたレイアウトを簡単に実装できます。

a をスペーサーとして使用するwx.StaticTextと機能しますが、後でラベルを設定するなどの特別なことをする必要がない限り、そこにウィジェットを配置する必要がないため、私には無駄に思えます。私は間違いなくそれをスペーサーとは呼びませんが、現時点ではたまたま空白になっているウィジェットです。

それを行うための複数の方法のいくつかは、時間の経過とともに C++ API がわずかに進化したこと、および後方互換性を維持したいこと、およびラッパーの Python 化が少し行われたことから生まれました。しかし、しばらく前よりはややこしくなっており、良いニュースとしては、Phoenix のドキュメントで十分に文書化されていることです。そこに文書化されているものは Classic と互換性があるはずであり、将来にわたって Phoenix と連携し続けます。

https://wxpython.org/Phoenix/docs/html/wx.Sizer.html

ところで、あなたは便利なメソッドAddSpacerとについて言及していないAddStretchSpacerので、それを行う別の方法をリストに追加してください。;-) ただし、あいまいさを解消するのに役立つので、それは素晴らしい追加です。

于 2016-06-28T00:13:57.260 に答える