Enthought の TraitsUI を使用して UI を設計していますが、目的を達成する方法がわかりません...
ここに私が欲しいものがあります: ビューに Items() があり、英語または SI 単位として表示したいです。SI/English ボタンに基づいて「編集」ボックスの値を変更できますが、ラベルのテキストを変更する方法がわかりません。たとえば、「Length, ft [ 3.28]」という項目があり、それを SI に変換すると、「Length, m [ 1.00]」と表示されます。3.28 から 1.00 への変換はできますが、「ft」を「m」に変更する方法がわかりません。
助言がありますか?
私が試したことの 1 つは、単位名 (「m」や「ft」など) を保持する文字列を定義することです。次に、項目で、次のようにラベルを設定します。
label = 'Top, '+lengthUnits
これは、ビューが最初に構築されたときは正常に機能しますが、単位コントロールを変更してもラベルは更新されません。ビューを強制的にすべての新しい値で更新する方法はありますか?
これは、私がやろうとしていることを示す小さなpyプログラムです(私のスタイルを自由に批判してください:))。また、何が起こるかを示すいくつかの画像を追加してみます。
# NOTE: This version of the code has been modified so that it works as I want it to :)
# Example trying to change text on a View...
from traits.api \
import HasTraits, Enum, CFloat, String
from traitsui.api \
import View, Group, HGroup, Item, spring
class TestDialog ( HasTraits ):
length = CFloat(1.0)
choose_units = Enum('English', 'SI')
current_units = 'English'
unit_name = String('ft')
ft_to_m = CFloat(3.28)
view = View(
Group(
HGroup(
spring,
Item(name = "length", label = 'Test length'),
Item(name = 'unit_name', style = 'readonly', show_label = False),
spring
),
HGroup(
spring,
Item(name = "choose_units"),
spring
)
),
title = 'Test Changing View Test'
)
def _choose_units_changed(self):
if self.current_units != self.choose_units:
if self.choose_units == 'SI':
self.length /= self.ft_to_m
self.unit_name = 'm'
else:
self.length *= self.ft_to_m
self.unit_name = 'ft'
self.current_units = self.choose_units
# Run the program (if invoked from the command line):
if __name__ == '__main__':
# Create the dialog:
TestIt = TestDialog()
# put the actual dialog up...
TestIt.configure_traits()