Pyqt5学习--Qwidget

1.基础属性

#!usr/bin/python
# -*- coding: utf-8 -*-
from PyQt5 import QtGui, QtCore
from PyQt5.Qt import *  # 刚开始学习可以这样一下导入
import sys

# 1,创建app
app = QApplication(sys.argv)


# 创建控件
class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()

    def showEvent(self, a0: QtGui.QShowEvent) -> None:
        print("接收到显示事件")

    def closeEvent(self, a0: QtGui.QCloseEvent) -> None:
        print("接收到关闭事件")

    def moveEvent(self, a0: QtGui.QMoveEvent) -> None:
        print("控件被移动了")

    def resizeEvent(self, a0: QtGui.QResizeEvent) -> None:
        print("大小被调整了")

    def enterEvent(self, a0: QtCore.QEvent) -> None:
        self.setStyleSheet("background-color:red;")

    def leaveEvent(self, a0: QtCore.QEvent) -> None:
        self.setStyleSheet("background-color:green;")


window = Window()
window.move(200, 200)
window.setMinimumSize(400, 400)
window.setMaximumSize(800, 800)
# resize 操控的是用户区域,不包含框架, resize设置的大小可以拖拽变动
window.resize(500, 500)
# 固定大小,拖拽不会变化
# window.setFixedSize(500,500)
label = QLabel(window)
label.setText("hello world")
label.resize(200, 200)
label.move(100, 100)
label.setStyleSheet("background-color:cyan;border:1px solid red")  # 为了更清晰看到具体的区域
# 打印border所占的宽高和控件内容所占宽高,边框站1,所以内容为98,28
# 内容区域不包含边框,返回值是内容区域左上右下两个点坐标(相对于自身)
print(label.contentsRect())
label.setContentsMargins(50, 50, 50, 10)  # 设置内容边距,内容边距是内容距离整个控件四周的距离,四个参数是边距顺时针,从左开始
print(label.getContentsMargins())


def addContent():
    print("======")
    new_content = label.text() + "hello world"
    label.setText(new_content)
    # 不添加以下方法,文本显示不会增加,自适应大小
    label.adjustSize()
    # label.resize(label.width()+100,label.height())  笨方法,使用该方法也可以重新设置大小


btn = QPushButton(window)
btn.setText("增加内容")
btn.move(300, 300)
btn.clicked.connect(addContent)

window.show()
# 3,进入消息循环
sys.exit(app.exec_())

2.事件传递

#!usr/bin/python
# -*- coding: utf-8 -*-
# from PyQt5 import QtGui, QtCore
# from PyQt5.Qt import *  # 刚开始学习可以这样一下导入
import sys
from PyQt5.Qt import *

# 1,创建app
app = QApplication(sys.argv)


# 事件传递:父子控件都对一个事件进行打印,点击子控件时,子控件如果响应了,父控件就不会再响应了,子控件没有响应父控件才响应


# 创建控件
class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()

    def mousePressEvent(self, ev: QMouseEvent):
        print("window的鼠标按下事件响应了")


class SecWindow(QWidget):

    def mousePressEvent(self, ev: QMouseEvent):
        # 让父控件接收事件进行处理
        ev.ignore()
        print(ev.isAccepted())
        print("sec_window的鼠标按下事件响应了")

    def keyPressEvent(self, a0: QKeyEvent) -> None:
        if a0.key() == Qt.Key_Tab:
            print("按了tab键")
        #     组合键
        if a0.modifiers() == Qt.ControlModifier and a0.key() == Qt.Key_S:
            print("按下了ctrl+s")


class Label(QLabel):

    def mousePressEvent(self, ev: QMouseEvent):
        # 子控件自己处理事件
        ev.accept()
        # 判断是否自己处理事件
        print(ev.isAccepted())
        print("label的鼠标按下事件响应了")


window = Window()
window.move(200, 200)
window.setMinimumSize(400, 400)
window.setMaximumSize(800, 800)
# resize 操控的是用户区域,不包含框架, resize设置的大小可以拖拽变动
window.resize(500, 500)
# 固定大小,拖拽不会变化
# window.setFixedSize(500,500)
sec_window = SecWindow(window)
sec_window.resize(300, 300)
# #这样能是下方的qss生效,不加不生效
sec_window.setAttribute(Qt.WA_StyledBackground, True)
sec_window.setStyleSheet("background-color:green;border:1px solid yellow")
# 监听键盘事件,先设置焦点给要监听的控件,然后重写keyPressEvent方法
sec_window.grabKeyboard()
label = Label(sec_window)
label.move(20, 20)
label.setText("hello world")
label.setStyleSheet("background-color:cyan;border:1px solid red")  # 为了更清晰看到具体的区域
# 获取某位置上的子控件,如果没有返回None
button = QPushButton(window)
button.setText("first")
button.resize(100, 100)
button.move(0, 400)
button.setStyleSheet("background-color:cyan;border:1px solid red")
button1 = QPushButton(window)
button1.setText("second")
button1.resize(100, 100)
button1.move(50, 400)
button1.setStyleSheet("background-color:green;border:1px solid red")
print(window.childAt(100, 100))
# 获取子控件的父控件
print(label.parentWidget())
# 获取所以子控件的矩形区域
print(window.childrenRect())
#将控件上升到顶层
button.raise_()
#将控件降低到底层
button.lower()
#将button放到button1下边
#设置图标
button.stackUnder(button1)
#状态提示需要主窗口有状态栏,会显示在状态栏
button.setStatusTip("这是个按钮")
#鼠标移动上去显示
button.setToolTip("按钮干啥呢")
button.setToolTipDuration(1000)
label.setEnabled(True)
label.setToolTipDuration(1000)
label.setWhatsThis("帮助信息")
icon = QIcon("icon.png")
window.setWindowIcon(icon)

#设置透明度
window.setWindowOpacity(1)
#设置窗口状态,最大化,最小化,全屏,活动窗口
window.setWindowState(Qt.WindowMaximized)
# window1=Window()
# window1.setWindowFlags(Qt.Drawer)
# 设置窗口样式,为对话框类型
# window.setWindowFlags(Qt.Dialog)
window.show()
# 3,进入消息循环
sys.exit(app.exec_())

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值