2016-07-01 7 views
0

Я хочу улучшить свой код, но в настоящее время не знаю, как это сделать. Итак, я использовал Qt Designer и создал главное окно плюс 3 диалога, которые можно открыть из главного окна. Преобразовали файлы .ui в файлы .py и создали класс MainWindow, который управляет всеми. Все работает отлично, но для меня это выглядит не так:Pyside + Qt Designer Лучшее кодирование

class MainWindow(QMainWindow, Ui_MainWindow): 
    # init and else 
    [...] 

    def open_add_dialog(self): 
     self.dialog = AddDialog() 
     self.dialog.show() 

    def open_edit_dialog(self): 
     self.dialog = EditDialog() 
     self.dialog.show() 

    def open_about_dialog(self): 
     self.dialog = AboutDialog() 
     self.dialog.show() 

    def assign_widgets(self): 
     self.actionAdd.triggered.connect(self.open_add_dialog) 
     self.actionEdit.triggered.connect(self.open_edit_dialog) 
     self.actionAbout.triggered.connect(self.open_about_dialog) 

код упрощается .. Итак, как вы видите, что я имею 3 практически одинаковые методы. Поэтому мне приходит в голову вопрос, можно ли объединить все в одно? То, что я хочу что-то вроде этого:

def open_dialog(self): 
    sender = self.sender() 
    sender.show() 

ответ

1

Я думаю, что вы никогда не должны использовать sender метод Qt, потому что она делает вызов метода из другой функции невозможно, вы можете использовать его только через механизм сигналов/слотов. Поэтому в сообщении the documentation говорится: «Эта функция нарушает объектно-ориентированный принцип модульности». Разумеется, использование его во время отладки прекрасное.

В вашем случае методы довольно малы. Вы можете использовать lambdas в инструкции connect, чтобы вам не приходилось создавать отдельные методы. Или вы можете создавать диалоги в конструкторе и подключаться только к методам show. Пример:

class MainWindow(QMainWindow, Ui_MainWindow): 

    def __init__(self): 
     self.add_dialog = AddDialog() 
     self.edit_dialog = EditDialog() 
     self.about_dialog = AboutDialog() 

    def assign_widgets(self): 
     self.actionAdd.triggered.connect(self.add_dialog.show) 
     self.actionEdit.triggered.connect(self.edit_dialog.show) 
     self.actionAbout.triggered.connect(self.about_dialog.show) 

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

  • Нет связанных вопросов^_^