2016-04-25 72 views
3

可能是一个愚蠢的noob问题,但在这里它是(浓缩的例子):PyQt的主窗口与对话

我已经有了一些基本的代码来创建一个QDialog的。这在实践中运作良好,我有事情,创建一个Pyqtgraph窗口,加载和绘图数据等:

import sys 
from PyQt4 import QtGui 

#class Window(QtGui.QMainWindow): 
class Window(QtGui.QDialog): 

    def __init__(self): 
     super(Window, self).__init__() 

     # Button to load data 
     self.LoadButton = QtGui.QPushButton('Load Data') 
     # Button connected to `plot` method 
     self.PlotButton = QtGui.QPushButton('Plot') 

     # set the layout 
     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.LoadButton) 
     layout.addWidget(self.PlotButton) 

     self.setLayout(layout) 

     self.setGeometry(100,100,500,300) 
     self.setWindowTitle("UI Testing") 


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 

    main = Window() 
    main.show() 

    sys.exit(app.exec_()) 

不过,我想创造这个作为QMainWindow中(仅仅是为了获得最大化,关闭等按钮现在),但如果我将类定义更改为:

class Window(QtGui.QMainWindow): 

当我运行代码时,我得到一个空白的主窗口。所以简单的问题是,我需要做什么才能使布局显示与QMainWindow中的QDialog一样?

最好的问候,

回答

2

doc

注:创建无中心部件的主窗口,不支持。即使只是一个占位符,您也必须拥有一个中央控件。

所以中央物件应创建和设置:

def __init__(self): 
     super(Window, self).__init__() 

     # Button to load data 
     self.LoadButton = QtGui.QPushButton('Load Data') 
     # Button connected to `plot` method 
     self.PlotButton = QtGui.QPushButton('Plot') 

     # set the layout 
     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.LoadButton) 
     layout.addWidget(self.PlotButton) 

     # setup the central widget 
     centralWidget = QtGui.QWidget(self) 
     self.setCentralWidget(centralWidget) 
     centralWidget.setLayout(layout) 

     self.setGeometry(100,100,500,300) 
     self.setWindowTitle("UI Testing") 
+0

完美 - 我的一部分,RTD健康提醒... :-) – BMichell