2015-01-21 3 views
0

У меня есть некоторые элементы в списке, которые уменьшают внутреннее значение, когда это значение равно 0, появляются окна и спрашивают, что делать, есть 3 варианта, установите элемент как «завершен», установите элемент как «пропущенный», установите для параметра «delayed».Правильный способ обработки опций во всплывающем окне

Окно - это QDockWidget, и опции выбираются через QPushButtons, я хочу связать их с функцией, которая будет обрабатывать каждое из трех возможных действий.

как

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 

Это упрощено просто передать общую идею, если кому нужен рабочий пример, не стесняйтесь задавать в комментариях, и я буду при условии.

Смежные вопросы