2015-01-21 49 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 

它簡化了傳達一般想法,如果任何人需要一個工作示例,隨時在評論中提問,我會提供。