2015-10-25 37 views
0

多次,我發現自己在這種情況下,運行時創建的性狀非哈克解決方案無法顯示在搜索

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可能沒有這個限制嗎?

回答

1

在MainDisplay的視圖中,您可以參考Item("object.a.i")等,其中object字面上是您輸入的內容(不是佔位符)。這在TraitsUI文檔的「高級視圖概念」一節Multi-Object Views中進行了描述。

+0

迷人。謝謝您的幫助。我確信在某些情況下我可以利用這一點,但我並沒有完全擺脫困境。例如,如果ai實際上是一個由int特性給出的高和低的範圍特徵,例如a.ceil_i,a.floor_i,則MainDisplay會抱怨它缺少ceil_i,floor_i – user3391229

+0

問題2:這個技巧不會如果你在成員的特質組中嘗試它,而不是單獨地使用每個特質,那麼就工作了。例如項目( 'object.a.a_group')。我的猜測是,如果我永遠不會調用a.configure_traits(),那麼a_group永遠不會存在。 – user3391229

+0

不確定您的範圍示例。對於你的第二個,要在視圖中顯示視圖,使用實例(...) –

相關問題