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

Proper way to deal with options in a pop up window

我在列表中有一些项目减少了一个内部值,当这个值是 0 时,一个 windows 弹出并询问要做什么,有 3 个选项,将项目设置为 'completed',设置项目为'missed',设置项目为'delayed'。

window 是一个 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)

但我不能这样做,因为我需要引用首先引发 window 的项目

我想知道是否可以通过一种方式设置点击插槽,它也会传递一个额外的参数,即引发 QDockWidget 的项目。

可能吗?否则,处理此问题的正确方法是什么?

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

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

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

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