【问题标题】:PySide edit widget from another class来自另一个类的 PySide 编辑小部件
【发布时间】:2012-09-13 16:27:17
【问题描述】:

我正在编写的程序有问题。由于它会很大,我想将布局和信号等分离到单独的类/模块中,以使事情更容易阅读。我希望能够从另一个类编辑布局小部件。这是可能的,还是我试图做一些不可能的事情?我在下面提供了一个示例,以防我的解释不清楚

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)

我意识到代码的最后一行可能是错误的,但这是我正在努力解决的部分。

非常感谢您的帮助。

【问题讨论】:

    标签: python pyside


    【解决方案1】:

    您当然可以让其他对象为您回答您的信号,只要它们符合 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)
    

    【讨论】:

    • 感谢我的示例的出色构建,尝试过这种方法,但由于缺乏对必须显式传递父级的理解而失败。现在一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    相关资源
    最近更新 更多