PyQt5 之Qwidget控件
一、常用API
1、大小与位置:
x():相对于父控件的位置,顶层控件(没有父控件)则相对于桌面的x位置
y():相对于父控件的y位置,顶层控件(没有父控件)则相对于桌面的y位置
pos():x和y的组合 QPoint(x, y)
width():控件的宽度,不包含任何窗口框架
height():控件的高度,不包含任何窗口框架
size():width和height的组合 ,QSize(width, height)
geometry():用户区域相对于父控件的位置和尺寸组合 QRect(x, y, width, height)
rect():0, 0, width, height的组合 QRect(0, 0, width, height)
frameSize():框架大小
frameGeometry():框架尺寸
move(x, y):操控的是x, y;也就是pos 包括窗口框架
resize(width, height):操控的是宽高 不包括窗口框架
setGeometry(x_noFrame, y_noFrame, width, height):
adjustSize():根据内容自适应大小
setFixedSize():设置固定尺寸
2、最大和最小尺寸:
minimumWidth():最小尺寸的宽度
minimumHeight():最小尺寸的高度
minimumSize():最小尺寸
maximumWidth():最大尺寸的宽度
maximumHeight():最大尺寸的高度
maximumSize():最大尺寸
setMaximumWidth():
setMaximumHeight():
setMinimumWidth():
setMinimumHeight():
setMinimumSize()
3、设置内容边距:
setContentsMargins(左, 上, 右, 下)
getContentsMargins():获取内容边距
contentsRect():获取内容区域
4、鼠标相关:
setCursor():设置鼠标形状
unsetCursor():重置鼠标
cursor() -> QCursor:获取鼠标
hasMouseTracking():判定是否设置了鼠标跟踪
setMouseTracking(bool):设置鼠标是否跟踪 。所谓的鼠标跟踪,其实就是设置检测鼠标移动事件的条件
5、事件相关:
showEvent(QShowEvent):控件显示时调用
closeEvent(QCloseEvent):控件关闭时调用
moveEvent(QMoveEvent):控件移动时调用
resizeEvent(QResizeEvent):控件调整大小时调用
enterEvent(QEvent):鼠标进入时触发
leaveEvent(QEvent):鼠标离开时触发
mousePressEvent(QMouseEvent):
mouseReleaseEvent(QMouseEvent):
mouseDoubleClickEvent(QMouseEvent)
mouseMoveEvent(QMouseEvent):鼠标按下后移动时触发
keyPressEvent(QKeyEvent):键盘按下时调用
keyReleaseEvent(QKeyEvent):
focusInEvent(QFocusEvent):获取焦点时调用
focusOutEvent(QFocusEvent):失去焦点时调用
dragEnterEvent(QDragEnterEvent):拖拽进入控件时调用
dragLeaveEvent(QDragLeaveEvent):拖拽离开控件时调用
dragMoveEvent(QDragMoveEvent):拖拽在控件内移动时调用
dropEvent(QDropEvent):拖拽放下时调用
paintEvent(QPaintEvent):显示控件, 更新控件时调用
changeEvent(QEvent):窗体改变, 字体改变时调用
contextMenuEvent(QContextMenuEvent):访问右键菜单时调用
inputMethodEvent(QInputMethodEvent):输入法调用
6、父子关系:
childAt(x, y):获取在指定坐标的控件。(根据当前点击的坐标获取子控件)
parentWidget():获取指定控件的父控件
childrenRect():所有子控件组成的边界矩形
from PyQt5.Qt import * import sys class Window(QWidget): def mousePressEvent(self, evt): click_x = evt.x() click_y = evt.y() # 根据当前点击的坐标获取子控件 child = self.childAt(click_x, click_y) if child is not None: child.setStyleSheet('background-color: green') if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.setWindowTitle('QWidget') window.resize(500, 400) label1 = QLabel(window) label1.setText('label1') label2 = QLabel(window) label2.setText('label2') label2.move(100, 100) window.show() sys.exit(app.exec_())
7、层级控制:注意:以下操作专指同级控件
lower():将控件降低到最底层
raise下划线():将控件提升到最上层
a.stackUnder(b):让a放在b下面
from PyQt5.Qt import * import sys class Label(QLabel): def mousePressEvent(self, evt): # 将控件提升到最上层 self.raise_() if __name__ == '__main__': app = QApplication(sys.argv) window = QWidget() window.setWindowTitle('层级关系调整') window.resize(500, 500) label1 = Label(window) label1.setText('QLabel1') label1.resize(200, 200) label1.setStyleSheet('background-color: red') label2 = Label(window) label2.setText('QLabel2') label2.resize(200, 200) label2.setStyleSheet('background-color: green') label2.move(100, 100) window.show() sys.exit(app.exec_())
8、顶层窗口相关:
setWindowIcon(QIcon("resource/header_icon.png")):
windowIcon():
setWindowTitle("社会我顺哥"):
windowTitle():
setWindowOpacity(float):不透明度
windowOpacity():
setWindowState(state):设置窗口的状态
showFullScreen():
showMaximized():
showNormal():正常
isMinimized():是否是最小化窗口
isMaximized():是否是最大化窗口
isFullScreen():是否全屏
window.setWindowFlags(Qt.WindowStaysOnTopHint):窗口样式
from PyQt5.Qt import * import sys class Window(QWidget): def __init__(self): super().__init__() def mousePressEvent(self, evt): # 判断窗口是否最大化 if self.isMaximized(): # 设置最小化 self.showNormal() else: # 设置最大化 self.showMaximized() if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.setWindowTitle('QWidget-窗口相关的操作') window.show() sys.exit(app.exec_())
9、交互状态:
setEnabled(bool):设置控件是否禁用
isEnabled():获取控件是否可用
setVisible(bool):
isHidden():
isVisible():
isVisibleTo(widget):
setWindowModified(bool):是否编辑
isWindowModified():
isActiveWindow():是否为活跃窗口
close():
from PyQt5.Qt import * import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle('QWidget-交互状态') self.setGeometry(0,0, 500, 400) self.setup_ui() def setup_ui(self): edit = QLineEdit(self) btn = QPushButton(self) btn.setText('按钮') btn.setDisabled(True) btn.move(0,100) def change(text): btn.setDisabled((not len(text) > 0)) edit.textChanged.connect(change) if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
10、信息提示:
statusTip():状态提示
setStatusTip(str):
toolTip():工具提示
setToolTip(str):
setWhatsThis(str):这是啥提示
whatsThis():
11、焦点控制:
setFocus():指定控件获取焦点
setFocusPolicy(Policy):设置焦点获取策略
Qt.TabFocus:通过Tab键获得焦点
Qt.ClickFocus:通过被单击获得焦点
Qt.StrongFocus:可通过上面两种方式获得焦点
Qt.NoFocus:不能通过上两种方式获得焦点(默认值),setFocus仍可使其获得焦点
clearFocus():取消焦点
12、不太重要的方法:
setAttribute(Qt :: WidgetAttribute 属性,bool on = true):属性
QWidget :: mask()const:遮罩 返回当前在小部件上设置的遮罩。如果没有设置掩码,返回值将是一个空白区域。
13、信号:
windowTitleChanged(QString):窗口标题改变信号
windowIconChanged(QIcon):窗口图标改变信号
customContextMenuRequested(QPoint):自定义上下文菜单请求信号