欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Pyqt5--Qwidget使用

程序员文章站 2022-04-16 16:16:43
#!usr/bin/python# -*- coding: utf-8 -*-from PyQt5 import QtGui, QtCorefrom PyQt5.Qt import * # 刚开始学习可以这样一下导入import sys# 1,创建appapp = QApplication(sys.argv)# 创建控件class Window(QWidget): def __init__(self): super(Window, self).__init_....

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_())

 

本文地址:https://blog.csdn.net/lingxiyizhi_ljx/article/details/107445604

相关标签: Pyqt5学习