我在列表中有一些项目会减少内部值,当此值为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的项目。
有可能吗?或者,处理这个问题的正确方法是什么?
我认为我需要在项目中保留一个变量,但我正在寻找一种更干净的方式,而不会用变量堵塞类。
答案 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
简化它只是为了表达一般性的想法,如果有人需要一个有效的例子,请随意在评论中提出,我会提供。