2016-07-01 5 views
0

私は自分のコードを改善したいが、現在どのように考えていない。 私はQtデザイナを使用し、メインウィンドウと3つのダイアログを作成しました。これらのダイアログはメインウィンドウから開くことができます。 .uiファイルを.pyファイルに変換し、すべてを管理するMainWindowクラスを作成しました。 すべてが正常に動作しますが、私にとっては、これは間違っているになります。あなたは私が3つのほぼ同じ方法をしました見てPyside + Qtデザイナーより良いコーディング

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) 

コードが...簡略化されています。それで、私の心には、すべてを1つに統合することが可能なのでしょうか?私はそれはあなたが唯一のシグナル/スロットメカニズムを介してそれを使用することができ、不可能他の関数からメソッドを呼び出しますので、あなたはQtののsender方法を使用しないでくださいだと思う

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

答えて

1

:私が欲しいのはこのようなものです。したがって、the documentationには、"この関数はオブジェクト指向のモジュール性に違反しています"と記載されています。もちろん、デバッグ中にそれを使用することはうまくいきます。

あなたの場合、方法はかなり小さいです。あなたは別の方法を作る必要がないように、connect文でlambdaを使うことができます。または、コンストラクタでダイアログを作成し、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) 
関連する問題