2015-01-21 53 views
0

我有一些项目在列表中减少内部值,当这个值为0,一个Windows弹出并要求做什么,有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

通过使窗口分离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 

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