代码之家  ›  专栏  ›  技术社区  ›  f.rodrigues

处理弹出窗口中选项的正确方法

  •  0
  • f.rodrigues  · 技术社区  · 11 年前

    我在一个列表中有一些项目可以减少内部值,当该值为0时,会弹出一个窗口并询问要做什么,有3个选项,将该项目设置为“已完成”,将该项设置为“未完成”,并将该项设为“延迟”。

    该窗口是一个QDockWidget,通过QPushButtons选择选项,我想将它们连接到一个函数,该函数将处理3个可能的操作中的每一个。

    喜欢

    self.options_button_completed.clicked.connect(self.set_completed)
    self.options_button_missed.clicked.connect(self.set_missed)
    self.options_button_delayed.clicked.connect(self.set_delayed)
    

    但我不能这样做,因为我需要对首先升起窗口的项目的引用

    我想知道是否可以设置单击的插槽,使其同时传递一个额外的参数,即引发QDockWidget的项目。

    有可能吗?或者,处理这个问题的正确方法是什么?

    我假设我需要为该项保留一个变量,但我正在寻找一种更干净的方法,而不会用变量阻塞类。

    1 回复  |  直到 11 年前
        1
  •  0
  •   f.rodrigues    11 年前

    通过使Window成为一个单独的QWidget,我可以在主窗口中实例化它,并传递额外的参数(项),这将是一个实例属性。

    class MainFrame(QWidget):
        def __init__(self):
            self.popup_windows = [] # to store the pops
    
    def display_popup_window(self, item):
        # item is the reference item that it's internal value reached 0
        popup_window = PopupFrame(self, item)
        popup_window.show()
        popup_window._raise()
        self.popup_windows.append(popup_window)
    
    
    class PopupFrame(QWidget):
        def __init__(self, parent, item):
            self.parent = parent
            self.item = item
            # set up other things, like buttons, layout...
            self.options_button_completed.clicked.connect(self.set_completed)
            self.options_button_missed.clicked.connect(self.set_missed)
            self.options_button_delayed.clicked.connect(self.set_delayed)
    
        def set_completed(self):
            # do something with self.item
            pass
    

    它被简化了,只是为了传达大意,如果任何人需要一个工作示例,请随时在评论中提问,我会提供。