控件出现重叠了,如何控制谁在上谁在下呢?在PyQt中提供了三个API,分别是lower()
、raise_()
、a.stackUnder(b)
。
API
- lower() : 将控件降低到最底层
- raise_() : 将控件提升到最上层
- a.stackUnder(b) : 让a放在b下面
- 注意:以上操作专指同级控件
控制重叠控件的上下层
下面是一个例子,两个控件产生遮挡时,如何将控制一个哪个控件在上面?
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys
# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)
# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("层级关系调整") # 标题
window.resize(500, 500) # 窗口的大小
window.move(400, 200) # 窗口初次显示的位置
# 创建其他控件
label1 = QLabel(window)
label1.setText("标签1")
label1.resize(200, 200)
label1.setStyleSheet("background-color: red")
# 创建其他控件
label2 = QLabel(window)
label2.setText("标签2")
label2.resize(200, 200)
label2.setStyleSheet("background-color: green")
label2.move(100, 100) # 此时label1和label2必然是相互遮挡的
# 现在想要把绿色的放到下面,如何实现?
# label2.lower() # 方案一: 把label2调高
# label1.raise_() # 方案二: 把label1调低
label2.stackUnder(label1) # 方案三: 把label放在label2下面
window.show() # 显示窗口,不然啥也没有
sys.exit(app.exec_())
拓展: 鼠标点击哪个就让其在上层
在上面的基础上,实现点击哪个控件就让哪个控件提到最上层.
实现起来很简单,只需要将类进行重写,监听鼠标事件,当被点击时,调用raise_
提升上来即可。
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys
class MyLabel(QLabel):
def mousePressEvent(self, evt):
self.raise_()
# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)
# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("层级关系调整") # 标题
window.resize(500, 500) # 窗口的大小
window.move(400, 200) # 窗口初次显示的位置
# 创建其他控件
label1 = MyLabel(window)
label1.setText("标签1")
label1.resize(200, 200)
label1.setStyleSheet("background-color: red")
# 创建其他控件
label2 = MyLabel(window)
label2.setText("标签2")
label2.resize(200, 200)
label2.setStyleSheet("background-color: green")
label2.move(100, 100) # 此时label1和label2必然是相互遮挡的
# 现在想要把绿色的放到下面,如何实现?
# label2.lower() # 方案一: 把label2调高
# label1.raise_() # 方案二: 把label1调低
label2.stackUnder(label1) # 方案三: 把label放在label2下面
window.show() # 显示窗口,不然啥也没有
sys.exit(app.exec_())