多次,我發現自己在這種情況下,運行時創建的性狀非哈克解決方案無法顯示在搜索
class MainDisplay(HasTraits):
a=Instance(A,())
def __init__(self):
self.a=A()
traits_view=View(...)
class A(HasTraits):
i=Int()
j=Int()
k=Int()
def __init__(self):
i,j,k=something
a_display=Group('i','j','k')
問題:我想在我的主顯示器來顯示A.1,A.J,A.K。
限制條件:
(1)I,J,K絕對必須保持A和不MainDisplay成員。它只是使沒有意義將它們包含在MainDisplay中,如果我爲每個特徵做了這些,MainDisplay將變得非常混亂。 (2)MainDisplay不可以繼承 class A.如果是的話,我可以在traits_view中做「Include('a_display')」。這是劃分MainDisplay中的一些代碼的一個很好的技巧,但對我來說不起作用。
(3)MainDisplay不能簡單地複製A中的特徵,然後同步它們。例如,MainDisplay.dummy_i = Int(),然後在init中,self.sync_traits('dummy_i',self.a,'i',mutual = True)。最後在MainDisplay.traits_view中使用'dummy_i'。這也適用,但MainDisplay類再次變得非常混亂!另外,每次我想改變GUI(或特性)時,我都有兩個地方需要編輯,這會減慢開發速度。
我是新來的GUI,但我覺得不能夠在運行時創建變量是一個奇怪的和尷尬的限制。我的印象是,看起來要取代traitsUI的Enaml也有這個限制。
我的主要興趣是顯示和交互Mayavi創建的三維幾何圖形。 PyQt可能沒有這個限制嗎?
迷人。謝謝您的幫助。我確信在某些情況下我可以利用這一點,但我並沒有完全擺脫困境。例如,如果ai實際上是一個由int特性給出的高和低的範圍特徵,例如a.ceil_i,a.floor_i,則MainDisplay會抱怨它缺少ceil_i,floor_i – user3391229
問題2:這個技巧不會如果你在成員的特質組中嘗試它,而不是單獨地使用每個特質,那麼就工作了。例如項目( 'object.a.a_group')。我的猜測是,如果我永遠不會調用a.configure_traits(),那麼a_group永遠不會存在。 – user3391229
不確定您的範圍示例。對於你的第二個,要在視圖中顯示視圖,使用實例(...) –