Как сделать кнопку перетаскиваемой и с возможностью поменять название
При нажатии кнопки нужно изменять текст.
Или отслеживать нажатия на LineEdit, при этом у неё нужно убрать всё как делает метод setFlat(True).
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, \
QPushButton, QLineEdit, QRadioButton, QGridLayout, QLabel, QHBoxLayout, QVBoxLayout, QMessageBox, QFileDialog
from PyQt5.QtWidgets import QAction, QScrollArea
from PyQt5 import QtCore, QtGui, QtWidgets
class MainWork(QMainWindow):
def __init__(self):
super().__init__()
# self.setupUi(self)
self.initUI()
def initUI(self):
# self.widget_fast_start
self.resize(100, 100)
self.widget1 = QWidget(self)
self.setCentralWidget(self.widget1)
self.push = QPushButton(self.widget1)
self.push.setText("Здесь ваш с удалением")
self.push.move(10, 10)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainWork()
ex.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
from PyQt5.Qt import *
class DragButton(QPushButton):
def mousePressEvent(self, event):
self.__mousePressPos = None
self.__mouseMovePos = None
if event.button() == Qt.LeftButton:
self.__mousePressPos = event.globalPos()
self.__mouseMovePos = event.pos()
elif event.button() == Qt.RightButton:
lineEdit = QLineEdit(self)
lineEdit.setMinimumHeight(self.size().height())
lineEdit.editingFinished.connect(
lambda le=lineEdit: self.editing_finished(le))
lineEdit.show()
lineEdit.setFocus()
super(DragButton, self).mousePressEvent(event)
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
delta = event.pos() - self.__mouseMovePos
newPos = self.pos() + delta
if self.parent():
geo = self.rect().translated(newPos)
parentRect = self.parent().rect()
if geo.x() < 0:
geo.moveLeft(0)
elif geo.right() > parentRect.right():
geo.moveRight(parentRect.right())
if geo.y() < 0:
geo.moveTop(0)
elif geo.bottom() > parentRect.bottom():
geo.moveBottom(parentRect.bottom())
self.move(geo.topLeft())
else:
self.move(newPos)
super(DragButton, self).mouseMoveEvent(event)
def editing_finished(self, le):
self.setText(le.text())
le.hide()
class MainWork(QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.push = DragButton("Кнопка", self)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWork()
w.resize(300, 300)
w.show()
sys.exit(app.exec_())




