2012-09-13 85 views
1

我在編寫程序時遇到問題。由於它將會非常大,我想將佈局和信號等分成不同的類/模塊,以便更容易閱讀。我希望能夠編輯另一個類的佈局小部件。這是可能的,還是我想做一些不可能的事情?我已經包括下面的例子,如果我的解釋不明確另一個類的PySide編輯部件

class Layout: 
    def __init__(self): 
    self.callback = CallBack() 

    def Gui(self): 
    ''' 
    some layout with a listwidget that affects another listwidget depending on choice for example 
    ''' 
    self.list1 = QtGui.QListWidget() 
    self.list1.addItems(['chocolate', 'candy', 'pop']) 

    self.list1.itemClicked.connect(self.callback.ButtonCallback) 

    self.list2 = QtGui.QListWidget() 

class CallBack(Layout): 
    def __init__(self) 
    super(CallBack, self).__init__() 

    def ButtonCallback(self, button_signal): 
    ''' 
    do get options for self.list2 depending on chosen item 
    ''' 

    new_items = ['item1', 'item2', 'item3'] 
    Layout.list2.addItems(new_items) 

我知道代碼的最後一行可能是錯誤的,但那個是我在掙扎的一部分。

非常感謝您的幫助。

回答

0

只要符合QObject,您當然可以讓其他對象爲您回答您的信號。在您編寫的示例代碼中,我將創建CallBack對象作爲QObject的子類,並保留與擁有它的Layout的關係,以便它可以訪問Layout對象的屬性。

class Layout: 
    def __init__(self): 
     self.callback = CallBack(self) 

    def Gui(self): 
    ''' 
    some layout with a listwidget that affects another listwidget depending on choice for example 
    ''' 
    self.list1 = QtGui.QListWidget() 
    self.list1.addItems(['chocolate', 'candy', 'pop']) 

    self.list1.itemClicked.connect(self.callback.ButtonCallback) 

    self.list2 = QtGui.QListWidget() 

class CallBack(QtCore.QObject): 
    def __init__(self, parent) 
     super(CallBack, self).__init__() 
     self.parent = parent 

    def ButtonCallback(self, button_signal): 
    ''' 
    do get options for self.parent.list2 depending on chosen item 
    ''' 

    new_items = ['item1', 'item2', 'item3'] 
    self.parent.list2.addItems(new_items) 
+0

感謝我的例子的偉大構建,曾嘗試過這種方法,但由於缺乏必須明確傳遞父項的理解而失敗。現在都在工作。 – user1668996