Форум сайта python.su
Добрый день.
Помогите решить следующую задачу:
Есть форма с кнопкой. Мне необходимо, чтобы при наведении курсора на кнопку на форме появлялась ещё одна кнопка, а при отведении она исчезала.
Пытался что-то изобразить, но получилось только вывести текст в консоль по этим событиям (с помощью функции print)
import sys from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(QtWidgets.QWidget): def start(self): super().start() self.initUi() def initUi(self): self.setGeometry(300,100,500,500) self.setWindowTitle("STRING") MegaButton = Button(self) MegaButton.setFixedSize(200, 50) MegaButton.setObjectName("PUSH") MegaButton.move(50, 50) self.show() class Button(QtWidgets.QPushButton): def enterEvent(self, *args, **kwargs): print("TEXT1") btn = QtWidgets.QPushButton(Ui_Form) btn.setFixedSize(200, 50) btn.setObjectName("PUSH") btn.move(60, 60) def leaveEvent(self, *args, **kwargs): print("TEXT2") if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) myapp = Ui_Form() sys.exit(app.exec_())
Офлайн
Mr.BoltА это точно кнопка? Как ее нажать если она исчезает? Предполагается использование клавиатуры или должно срабатывать нажатие на пустом месте?
а при отведении она исчезала.
import wx app = wx.App() frm = wx.Frame(None, title="Hello") st = wx.Button( frm, label="strangeButton", pos=(50,50)) button = wx.Button( frm, label = u"MyButton") def f(evt): st.Hide() def g(evt): st.Show() button.Bind( wx.EVT_ENTER_WINDOW, f) button.Bind( wx.EVT_LEAVE_WINDOW, g) frm.Show() app.MainLoop()
Отредактировано doza_and (Сен. 6, 2017 19:15:02)
Офлайн
from PyQt5.Qt import * class W(QWidget): def __init__(self): super().__init__() self.btn = QPushButton('btn') grid = QGridLayout(self) grid.addWidget(self.btn) self.btn.hide() self.setMouseTracking(True) def mouseMoveEvent(self,e): rect = QRect(0,0,20,20) if e.pos() in rect: self.btn.show() else: self.btn.hide() if __name__ == '__main__': app = QApplication([]) w = W() w.show() app.exec_()
Офлайн
более продвинутый вариант
import sys from PyQt5.Qt import * class W(QWidget): def __init__(self): super().__init__() self.btn1 = QPushButton('Button') self.btn1.setObjectName('btn1') self.btn2 = QPushButton('HideButton') grid = QGridLayout(self) grid.addWidget(self.btn1,0,0) grid.addWidget(self.btn2,1,0) self.btn2.hide() qApp.installEventFilter(self) def eventFilter(self,obj,event): if obj.objectName() == 'btn1': if event.type() == QEvent.Enter: self.btn2.show() if event.type() == QEvent.Leave: self.btn2.hide() return QWidget.eventFilter(self,obj,event) if __name__ == '__main__': app = QApplication(sys.argv) app.lastWindowClosed.connect(sys.exit) w = W() w.move(0,0) w.show() app.exec_()
Офлайн
Благодарю за ответы. В кнопке конечно смысла нет, но мне нужен был сам механизм вызова виджета по наведении мыши.
Офлайн