在ubuntu下用的pyqt5.9。
在主类(继承自QWidget)里,新建个toolBoxOne(也是继承自QWidget),然后toolBoxOne里放置垂直布局,垂直布局里放几个按钮。
运行后,结果什么也显示不出来。
import sys
from PyQt5.QtWidgets import QWidget,QVBoxLayout, QPushButton, QApplication
class Test(QWidget):
def __init__(self):
super().__init__()
toolBoxOne = QWidget()
btnOne = QPushButton('One')
btnTwo = QPushButton('Two')
btnThree = QPushButton('Three')
layout = QVBoxLayout()
layout.addWidget(btnOne)
layout.addWidget(btnTwo)
layout.addWidget(btnThree)
toolBoxOne.setLayout(layout)
# self.toolBoxOne.show()
self.setWindowTitle('Test')
# self.toolBoxOne.setGeometry(100, 100, 500, 500)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Test()
win.show()
sys.exit(app.exec_())
后来发现toolBoxOne这样新建:
toolBoxOne = QWidget(self)
或者这样:
self.toolBoxOne = QWidget() 然后self.toolBoxOne.show()
就可以显示出布局了。
如果说toolBoxOne必须要指明父控件才可以显示的话,那么,为什么按钮及垂直布局,我没有指明父控件也可以正常显示呢?
离线
对Qt还不太熟,帮顶一下.
离线
toolBoxOne = QWidget() toolBoxOne这个没有加入布局吧, 也没有指定父亲
离线
toolBoxOne = QWidget() toolBoxOne这个没有加入布局吧, 也没有指定父亲
toolBoxOne指定父控件就没问题了,我好奇的是其他按钮,及layout,我都没有指定父控件。但是一旦toolBoxOne指定父控件的话,就都可以正常显出来了。这是我现在疑惑的地方。
toolBoxOne里加入了layout布局。
-----------------------------------------------------------------------------------------------
如果不指定toolBoxOne的父控件的话,再其前边加个self,最后再调用下self.toolBoxOne.show(),也能显示出窗口及按钮。
离线
toolBoxOne 没有指定父窗口, 但加入了布局也也显示不出来吗?
离线
self.layout.addWidget(toolBoxOne); 意思加入这一行呢
离线
知道了, 其他按钮,及layout,的关系是这样的: 按钮放入layout布局(相当入按钮在layout里), layout又通过toolBoxOne.setLayout(layout)(即layout在toolBoxOne里), 只要toolBoxOne显示了, 其“子孙”本身就显示了, 刚开始没看仔细, 不好意思
离线