Python版本3.7
PySide2 Version: 5.14.1
官方文档:http://doc.qt.io/qtforpython/index.html
先看一个小程序
from PySide2.QtWidgets import QPushButton, QApplication
app = QApplication()
button = QPushButton(u'按钮')
button.show()
app.exec_()
运行起来没有什么问题。
再看另一个
from PySide2.QtWidgets import QPushButton, QApplication, QWidget
app = QApplication()
window = QWidget()
button = QPushButton('按钮')
window.show()
app.exec_()
运行起来好像,也没什么问题,不过button不见了,这里其实是想把button放在window里面,跟随window一起显示的,但是并没有。原因就在于button没有指定它的父对象,所以button不知道它应该在哪里,所以也不会主动显示,当然,我们可以强行让它显示。如下:
from PySide2.QtWidgets import QPushButton, QApplication, QWidget
app = QApplication()
window = QWidget()
button = QPushButton('按钮')
button.show()
window.show()
app.exec_()
button没有显示在window里面,而是以一个窗口显示的。原因在于在生成button对象时,没有告诉button的父对象是谁,改下代码。
from PySide2.QtWidgets import QPushButton, QApplication, QWidget
app = QApplication()
window = QWidget()
button = QPushButton('按钮', window)
window.show()
app.exec_()
button = QPushButton('按钮', window)
作用是告诉window,button是window儿子,然后在window显示时,就会带上button。
再看另一个例子
from PySide2.QtWidgets import QPushButton, QApplication, QWidget, QVBoxLayout
app = QApplication()
window = QWidget()
button = QPushButton('按钮')
layout = QVBoxLayout()
layout.addWidget(button)
window.setLayout(layout)
window.show()
app.exec_()
layout = QVBoxLayout()
这里创建一个布局对象
window.setLayout(layout)
然后window加载这个布局对象
注意button并没有指定父对象噢,但还是正常显示了。原因在于button被放进了layout里面,受layout进行管理,而layout又被window设置为当前布局,所以button又被间接放在了window上。
有时候可能出现控件不显示或者控件显示有问题就需要检测下是不是这些细节上没有考虑到,这也是我之前没有仔细想过的一些问题。