控件出现重叠了,如何控制谁在上谁在下呢?在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_())

博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/LowerRaise.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 07 月 20 日
如果觉得我的文章对你有用,请随意赞赏