2016-07-28 52 views
0

我想设置一个布局管理器。但得到的消息:pyqt4已经有一个布局。如何“检测”或更改?

QLayout: Attempting to add QLayout "" to Window "", which already has a layout 

如何更改或检测哪种类型的布局是?我想使用boxlayout,因为它似乎是首选。

import sys 
from PyQt4 import QtGui as qt 

class Window(qt.QMainWindow): 

    def __init__(self): 
     super(Window, self).__init__() 
     #Lav widgets 
     self.CreateWidgets()  

    def CreateWidgets(self): 
     btn = qt.QPushButton("Fetch", self) 
     btn.clicked.connect(self.GetData) 

     self.layout = qt.QVBoxLayout(self) 

     self.setGeometry(560, 240, 800, 600) 
     self.setWindowTitle("We do not sow") 
     self.show() 

    def GetData(self): 
     print("Hello World!") 

app = qt.QApplication(sys.argv) 
w = Window() 
sys.exit(app.exec_()) 

回答

2

QMainWindow类具有内置的工具栏和码头的小部件,以及菜单栏和状态的支持 - 因此它必须有一个固定的布局。因此,不必将子窗口小部件添加到主窗口本身,您必须设置其中央窗口小部件,然后将子窗口小部件添加到该窗口小部件中:

def CreateWidgets(self): 
     btn = qt.QPushButton("Fetch", self) 
     btn.clicked.connect(self.GetData) 

     widget = qt.QWidget(self) 
     layout = qt.QVBoxLayout(widget) 
     layout.addWidget(btn) 

     self.setCentralWidget(widget) 

     self.setGeometry(560, 240, 800, 600) 
     self.setWindowTitle("We do not sow") 
相关问题