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
上一篇: pip安装速度慢的一种解决方法
下一篇: LeetCode112.Path Sum