基本上我有一个带有菜单栏和许多选项的主窗口。当我单击其中一个选项时,我的代码应该打开另一个窗口。我的代码现在看起来像这样。 导入所有必需的库。
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部分?
答案 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_())