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

时间:2015-01-21 00:45:31

标签: python pyqt pyside

我在列表中有一些项目会减少内部值,当此值为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 个答案:

答案 0 :(得分:0)

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

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

简化它只是为了表达一般性的想法,如果有人需要一个有效的例子,请随意在评论中提出,我会提供。