2

私はZetcodeの例からPySideを学び始め、2つのウィンドウを持つアプリをコーディングしようとしました。「レイアウトビュー」の親である「スケマティックビュー」で、それぞれにメニューバーがあります。開始時には、回路図面ウィンドウのみである必要があり、レイアウトの勝利は、メニューバーのルートにあるswitchtoLAYOUTによって開始する必要があります。

私の質問は次のとおりです。

  1. ドロップダウンを表示せずにルートで「switchtoLAYOUT」を作成し、「レイアウトビュー」ウィンドウの1つのインスタンスのみでアクションを実行するにはどうすればよいですか?
  2. 2つのウィンドウ(「switchtoLAYOUT」と「switchtoSCHEMATIC」)の間でフォーカスを切り替える方法は?
  3. 私のコードを調べて、何か賢いものを提案してください(それは難しいことではありません)。

コード:

import sys
from PySide import QtCore, QtGui

class schematicWindow(QtGui.QMainWindow):

    def __init__(self):
        super(schematicWindow, self).__init__()
        self.defineSchWin()

    def defineSchWin(self):               
        exitAction = QtGui.QAction('&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(self.close)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)
        menubar.addMenu('&Edit')
        menubar.addMenu('&Passives')
        menubar.addMenu('&Descretes')
        menubar.addMenu('&IC\'s')
        swToLayMenu = menubar.addMenu('switchtoLAYOUT')
        swToLayAction = QtGui.QAction(self)
        swToLayAction.triggered.connect(self.layoutWindow)
        swToLayMenu.addAction(swToLayAction)    # open layoutWindow (if not exists) 
                                                # and set focus to layoutWindow 

        self.setGeometry(0, 300, 500, 300)
        self.setWindowTitle('Schematic View')    
        self.show()

    def layoutWindow(self):
        window = QtGui.QMainWindow(self)
        window.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        window.statusBar()
        menubar = window.menuBar()
        switchtoSchMenu = menubar.addMenu('switchtoSCHEMATIC')
        window.setGeometry(100, 600, 500, 300)
        window.setWindowTitle('Layout View')
        window.show()

def main():

    app = QtGui.QApplication(sys.argv)
    ex = schematicWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
4

1 に答える 1

5

クラス内のレイアウトウィンドウへの参照を保持する必要があります(を入力する必要がありますself.layout_window = None__init__。この関数は、ウィンドウが初期化されているかどうかをチェックし、初期化されていない場合はそれを作成し、ウィンドウが表示されていることを確認してから、新しいウィンドウをアクティブウィンドウに設定します。次のようなもの:(これはテストされていません)

def layoutWindow(self):
    if self.layout_window is None:
        window = QtGui.QMainWindow(self)
        self.layout_window = window
        window.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        window.statusBar()
        menubar = window.menuBar()
        switchtoSchMenu = menubar.addMenu('switchtoSCHEMATIC')
        window.setGeometry(100, 600, 500, 300)
        window.setWindowTitle('Layout View')
    else:
        window = self.layout_window

    window.show()
    window.activateWindow()
    window.raise() # just to be sure it's on top

ドキュメント

于 2013-01-23T04:16:59.413 に答える