0

基本的に、メニューバーといくつかのオプションを備えたメインウィンドウがあります。オプションの1つをクリックすると、コードが別のウィンドウを開くはずです。私のコードは今このようになっています。必要なすべてのライブラリがインポートされます。

class subwindow(self):
    //Another small window

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow , self).__init__()     
        self.window()

    def window(self):
         Action = QtGui.QAction(QtGui.QIcon('action.png') , 'action' , self)          
         Action.triggered.connect(self.a)

         mb = self.menuBar()
         option = mb.addMenu('File')
         option.addAction(Action)

         self.show()

   def a(self):
         s = subwindow()



if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec_())

コードのサブウィンドウ部分を実行するにはどうすればよいですか?QtGui.QApplication部分を追加するにはどうすればよいですか?

4

2 に答える 2

1

QtアプリやGTKなどの多くのGUIアプリケーションでサブウィンドウを開きたい場合は、ダイアログを開きます。以下の例は、これを行う方法を示しています。ダイアログを開いて名前を尋ねるメニューがあるメインウィンドウがあります。ダイアログをカスタマイズする場合は組み込みのダイアログを使用し、ダイアログに含まれるものをチェックアウトしてカスタムダイアログを作成することができます。別のQMainWindowの代わりにダイアログを作成する方法については、PyQt4の複数のウィンドウを確認してください。

import sys
from PyQt4 import QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        action = QtGui.QAction(QtGui.QIcon('action.png'), '&New Window', self)
        action.triggered.connect(self.new_win)
        self.menuBar().addMenu('&File').addAction(action)
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def new_win(self):
        name, ok = QtGui.QInputDialog.getText(self, 'Input', 'Enter name:')
        print name, ok

app = QtGui.QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
于 2012-11-09T15:11:54.960 に答える
1

@Bakuriuがコメントで述べたように、QApplicationのインスタンスは1つだけでなければなりません。これにより、アプリケーションのメインイベントループが開始されます。

QDialogクラスからSubWindowクラスを派生させ、必要に応じてカスタマイズすることで、新しいウィンドウを作成できます。ダイアログを表示するには、QDialogクラスのexec_()メソッドを呼び出す必要があります。

たとえば、コードでは次のようになります。

from PyQt4 import QtGui
import sys

class SubWindow(QtGui.QDialog):
    def __init__(self):
        super(SubWindow , self).__init__()     
        label = QtGui.QLabel("Hey, subwindow here!",self);

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow , self).__init__()     
        self.window()

    def window(self):
        Action = QtGui.QAction(QtGui.QIcon('action.png') , 'action' , self)          
        Action.triggered.connect(self.a)

        mb = self.menuBar()
        option = mb.addMenu('File')
        option.addAction(Action)

        self.show()

    def a(self):

        s = SubWindow()
        s.exec_()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec_())
于 2012-11-09T15:41:31.823 に答える