PyQt5 GUI怎么画框
时间: 2024-04-07 20:11:09 浏览: 43
您可以使用QPainter在PyQt5 GUI中绘制框。下面是一个简单的示例代码,演示如何在PyQt5 GUI中绘制一个黑色边框的矩形框:
```python
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication
import sys
class MyWidget(QWidget):
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(QPen(Qt.black, 2, Qt.SolidLine))
painter.drawRect(10, 10, 100, 100)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())
```
在这个示例中,我们定义了一个MyWidget类,它继承自QWidget,重写了QWidget的paintEvent方法。在paintEvent方法中,我们创建了一个QPainter对象,并设置了画笔的颜色、线宽和线型。然后使用drawRect方法绘制了一个矩形框。
您可以根据自己的需求修改绘制框的位置、大小、颜色等属性。
相关问题
python代码用pyqt实现鼠标点击画框
很高兴回答这个问题。您可以使用以下代码片段来实现在 PyQt5 中使用鼠标点击绘制一个矩形框:
```
from PyQt5.QtCore import Qt, QPoint, QRect
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtWidgets import QWidget, QApplication
class DrawingWidget(QWidget):
def __init__(self):
super().__init__()
self.setMouseTracking(True)
self.start_pos = None
self.end_pos = None
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.start_pos = event.pos()
def mouseMoveEvent(self, event):
if event.buttons() and Qt.LeftButton:
self.end_pos = event.pos()
self.update()
def paintEvent(self, event):
if self.start_pos and self.end_pos:
painter = QPainter(self)
pen = QPen(Qt.red)
pen.setWidth(2)
painter.setPen(pen)
rect = QRect(self.start_pos, self.end_pos)
painter.drawRect(rect)
if __name__ == '__main__':
app = QApplication([])
window = DrawingWidget()
window.show()
app.exec_()
```
在此代码片段中,DrawingWidget 类继承自 QWidget 类并重写了 mousePressEvent 、mouseMoveEvent 和 paintEvent 方法。当鼠标左键按下时,mousePressEvent 方法将开始坐标存储到 start_pos 变量中。当鼠标拖动时,mouseMoveEvent 方法将结束坐标存储到 end_pos 变量中并调用 update() 方法,该方法将强制执行 paintEvent 方法以更新窗口。paintEvent 方法将在窗口上绘制一个红色矩形。
生成一个pyqt5的label类,这个类可以通过鼠标左键的点击事件和释放事件画框,并保存画出框的中心店的坐标和长宽
好的,以下是生成pyqt5的label类,并且可以通过鼠标左键的点击事件和释放事件画框,并保存画出框的中心店的坐标和长宽的代码:
```python
from PyQt5.QtWidgets import QLabel
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt, QPoint
class CustomLabel(QLabel):
def __init__(self):
super().__init__()
self.setMouseTracking(True) # 开启鼠标追踪,将鼠标移动事件也加入事件处理
self.is_down = False # 记录鼠标是否按下
self.start_pos = QPoint() # 记录鼠标按下的位置
self.end_pos = QPoint() # 记录鼠标释放的位置
self.center_point = QPoint() # 记录框的中心点坐标
self.width = 0 # 记录框的宽度
self.height = 0 # 记录框的高度
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton: # 如果鼠标左键按下
self.is_down = True # 标记鼠标已经按下
self.start_pos = event.pos() # 记录鼠标按下的位置
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton: # 如果鼠标左键释放
self.is_down = False # 标记鼠标已经释放
self.end_pos = event.pos() # 记录鼠标释放的位置
# 计算框的中心点坐标、宽度、高度
x1, y1 = self.start_pos.x(), self.start_pos.y()
x2, y2 = self.end_pos.x(), self.end_pos.y()
self.center_point = QPoint((x1 + x2) // 2, (y1 + y2) // 2)
self.width = abs(x2 - x1)
self.height = abs(y2 - y1)
self.update() # 更新widget的绘图
def mouseMoveEvent(self, event):
if self.is_down: # 如果鼠标已经按下
self.end_pos = event.pos() # 记录鼠标的位置
self.update() # 更新widget的绘图
def paintEvent(self, event):
super().paintEvent(event)
if self.is_down: # 如果鼠标已经按下
painter = QPainter(self)
painter.setPen(QPen(Qt.red, 2, Qt.SolidLine))
painter.drawRect(self.start_pos.x(), self.start_pos.y(), # 绘制矩形框
self.end_pos.x() - self.start_pos.x(),
self.end_pos.y() - self.start_pos.y())
```
您可以在需要使用这个类的PyQt5界面中,实例化一个CustomLabel对象,并将它添加到界面中:
```python
from PyQt5.QtWidgets import QMainWindow, QWidget, QVBoxLayout
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
central_widget = QWidget()
layout = QVBoxLayout()
label = CustomLabel() # 实例化CustomLabel对象
layout.addWidget(label)
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
```
这样,您就可以在界面中使用CustomLabel对象,并通过鼠标左键的点击和释放事件实现绘制矩形框,并保存框的中心点坐标和长宽。
阅读全文