写一个pyqt5文件,它有一个label类,label类可以实现通过鼠标事件画框的功能,当画完框以后通过Qinputdialog可以输入一个名字并在主界面的listwidget中生成一个与改名字同名的item
时间: 2024-05-05 11:20:28 浏览: 19
好的,我已经明白了您的要求,下面是实现该功能的代码:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QInputDialog, QListWidget
from PyQt5.QtGui import QPixmap, QPainter, QPen
from PyQt5.QtCore import Qt, QPoint
class MyLabel(QLabel):
def __init__(self, parent=None):
super(MyLabel, self).__init__(parent)
self.pix = QPixmap(self.width(), self.height())
self.pix.fill(Qt.transparent)
self.is_paint = False
self.start_point = QPoint()
self.end_point = QPoint()
def paintEvent(self, event):
super(MyLabel, self).paintEvent(event)
painter = QPainter(self.pix)
painter.setPen(QPen(Qt.red, 3, Qt.SolidLine))
if self.is_paint:
painter.drawRect(self.start_point.x(), self.start_point.y(), self.end_point.x() - self.start_point.x(), self.end_point.y() - self.start_point.y())
self.setPixmap(self.pix)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton and not self.is_paint:
self.start_point = event.pos()
self.is_paint = True
def mouseMoveEvent(self, event):
if event.buttons() and Qt.LeftButton and self.is_paint:
self.end_point = event.pos()
self.update()
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton and self.is_paint:
self.end_point = event.pos()
self.is_paint = False
self.update()
text, ok = QInputDialog.getText(self, '输入框', '请输入名字:')
if ok and text:
item = text
MainWindow.list_widget.addItem(item)
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setFixedSize(500, 500)
self.label = MyLabel(self)
self.label.setGeometry(0, 0, 500, 500)
self.list_widget = QListWidget(self)
self.list_widget.setGeometry(0, 0, 100, 500)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
运行以上代码即可看到实现的效果。