PySide2学习记录(十一):关于显示问题

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上。

有时候可能出现控件不显示或者控件显示有问题就需要检测下是不是这些细节上没有考虑到,这也是我之前没有仔细想过的一些问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容