PyQt4中需要的基本帮助

时间:2012-11-09 13:45:05

标签: python window pyqt pyqt4 qtgui

基本上我有一个带有菜单栏和许多选项的主窗口。当我单击其中一个选项时,我的代码应该打开另一个窗口。我的代码现在看起来像这样。 导入所有必需的库。

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部分?

2 个答案:

答案 0 :(得分:1)

当你想在Qt应用程序和许多gui应用程序(如GTK)中打开子窗口时,你打开一个Dialog。以下示例可以向您展示如何执行此操作。它有一个主窗口,其中有一个菜单,可以打开对话框并询问您的姓名。它使用内置对话框,如果要自定义对话框及其包含的内容,可以查看Create a custom dialog。有关创建对话框而不是另一个QMainWindow的讨论,请查看Multiple Windows in 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_())

答案 1 :(得分:1)

就像@Bakuriu在评论中所说,必须只有一个QApplication实例。这将启动应用程序的主事件循环。

您可以通过从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_())