obj._bases_, 获取直接父类,是一个属性
obj.mro() 获取继承链的父类
obj._subclasses_() 获取子类, 是一个魔法方法
from PyQt5.QtWidgets import QLabel
label = QLabel(parent, flags)
# parent 父控件
# 标志位 设置窗口的外观
obj.x(), 距离父控件或者屏幕左上角的x轴距离,包含边框
obj.y(),距离父控件或者屏幕左上角的y轴距离,包含边框
obj.pos(), x和y的组合,是QPoint(x,y) 的对象
obj.width() 控件的宽度,不含边框
obj.height() 控件的高度,不含边框
obj.size() 宽高的组合,QSize(width, height) 的对象
geometry, 用户区域(纯控件部分)相对于父控件或者屏幕的位置,是QRect(x,y, width, height) 的对象
# 根据内容,自适应大小
label.adjustSize()
# 设置固定大小, 无法变化
label.setFixedSize(300, 400)
布局案例:
# __author__ = "laufing"
# 导包
# from PyQt5.Qt import * 导入所有的类, 占用内存
from PyQt5.QtWidgets import QApplication # 应用控件
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QWidget
from PyQt5.QtGui import QIcon
from PyQt5.QtGui import QPixmap
import sys
if __name__ == '__main__':
total_widget = int(input("输入总数:").strip())
row_count = int(input("每行展示数:").strip())
# 多少行
row_ = total_widget/row_count if total_widget % row_count == 0 else total_widget // row_count + 1
sub_col_width = 500 / row_count
sub_row_height = 500 / row_
# 1.创建应用程序
app = QApplication(sys.argv)
print("接收的命令行参数:", app.arguments())
# print("全局的应用程序对象:", qApp)
# 2. 控件操作
window = QWidget() # 窗口控件
window.setWindowTitle("laufing") # 窗口标题
window.resize(500, 500) # 调整窗口大小(用户区域)
window.move(300, 300) # 移动窗口位置(包含边框)
# 创建控件对象,并放入 窗口控件
# i控制行,j 控制列
i,j = 0, 0
#
print("xxx total widget:", total_widget)
for k in range(total_widget):
print("xxxxx:", k)
label = QLabel(window) # 实例化一个标题控件,放入window窗口控件中
label.setText("文本" + "%s, %s, %s"%(i, j, k))
if j % 2 == 0:
label.setStyleSheet("background-color: cyan; text-align: center;")
else:
label.setStyleSheet("background-color: pink")
label.resize(sub_col_width, sub_row_height)
label.move(j*sub_col_width, i*sub_row_height)
j += 1
if j == row_count:
i += 1
j = 0
# logo 图标
icon = QIcon()
icon.addPixmap(QPixmap("./imgs/dog.jpg"), QIcon.Normal, QIcon.Off) # 添加Pixmap对象
window.setWindowIcon(icon)
# 显示
window.show()
# 3. app.exec_() 进入消息循环,保证程序一直运行
exit_code = app.exec_()
# 退出程序,并传入退出码
sys.exit(exit_code)
obj.setContentsMargin(左,上,右,下)
obj.getContentsMargin()
obj.contentsRect() 内容区域
鼠标移动到某控件(区域)时,显示的形状。
obj.setCursor(Qt.xxx)
# 设置鼠标的样式
from PyQt5.QtCore import Qt
window.setCursor(Qt.CursorShape.CrossCursor)
from PyQt5.QtGui import QIcon, QPixmap, QCursor
# 自定义鼠标的样式
pix_map = QPixmap("./imgs/dog.jpg")
# 缩放图片
pix_map2 = pix_map.scaled(30, 30) # 30 * 30
# 实例化QCursor 对象
q_cursor = QCursor(pix_map2) # 后面两个参数 hotX,hotY 鼠标的箭头点
# 控件对象 设置鼠标样式
window.setCursor(q_cursor)
# 取消设置
window.unsetCursor()
# 控件获取鼠标对象
current_cursor = window.cursor() # QCursor对象
# 设置鼠标的位置
current_cursor.setPos(0, 0)
# 打印鼠标的位置
print(current_cursor.pos())
current_cursor.pixmap() # 获取鼠标图片
class MyWindow(QWidget):
# 鼠标移动事件
def mouseMoveEvent(self, mouseEvent: QMouseEvent):
print("全局位置(屏幕位置)...", mouseEvent.globalPos())
print("局部位置(窗口位置)...", mouseEvent.localPos())
print("屏幕位置(全局位置)...", mouseEvent.screenPos())
print("窗口位置(布局位置)...", mouseEvent.windowPos())
print("button...", mouseEvent.button())
print("buttons...", mouseEvent.buttons())
这里设置鼠标移动的跟踪,则鼠标移动就触发上述事件
# 控件内部设置鼠标跟踪,触发mouseMoveEvent
window.setMouseTracking(True)
window.setMouseTracking(False)
案例: 创建一个窗口,内部实现一个QLabel控件,当鼠标移入窗口后,让QLabel控件随着鼠标的位置而移动位置
# __author__ = "laufing"
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget, QLabel
from PyQt5 import QtGui
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("laufing")
# 实例化图片对象
pixmap = QtGui.QPixmap("./imgs/dog.jpg").scaled(50, 50)
# 实例化图标对象
icon = QtGui.QIcon()
icon.addPixmap(pixmap, QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.setWindowIcon(icon)
# 设置窗口内容宽高
self.resize(500, 500)
# 窗口居中
desktop_geo = QDesktopWidget().geometry()
screen_width, screen_height = desktop_geo.width(), desktop_geo.height()
self.move(screen_width/2 - self.width()/2, screen_height/2 - self.height()/2)
# 设置鼠标 追踪
self.setMouseTracking(True)
# 设置QLabel控件对象
self.label = QLabel(self)
self.label.setText("测试鼠标追踪")
self.label.setStyleSheet("background-color: pink;")
self.label.resize(100, 50)
self.label.move(10, 10)
def mouseMoveEvent(self, a0: QtGui.QMouseEvent):
print("鼠标移动.....")
x,y = a0.localPos().x(), a0.localPos().y()
self.label.move(x, y)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MyWindow()
window.show()
exit_code = app.exec_()
sys.exit(exit_code)