gpt4 book ai didi

python - 如何通过将光标放在框架内来调整框架大小?

转载 作者:太空宇宙 更新时间:2023-11-03 21:29:23 26 4
gpt4 key购买 nike

我想知道当光标位于上方并超出范围时如何更改 qframe 的大小

也就是说:

默认:宽度(50) 光标在框架上:宽度(100) 光标在框架外:宽度(50)

根据我的研究,我认为它正在使用dragEnterEvent和dragLeaveEvent

这是我尝试过的:

from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5 import QtCore
from PyQt5 import uic


class Principal(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
uic.loadUi("other.ui",self)

def dragEnterEvent(self,obj,event):
if event == self.mouseMoveEvent:
if obj == self.frame:
self.frame.width(100)
def dragLeaveEvent(self,obj,event):
if event == self.mouseMoveEvent:
if obj == self.frame:
self.frame.width(50)


app = QApplication([])
p = Principal()
p.show()
app.exec_()

其他.ui

    <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>580</width>
<height>368</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QFrame" name="frame">
<property name="geometry">
<rect>
<x>180</x>
<y>70</y>
<width>151</width>
<height>141</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">
background:red;
</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

最佳答案

dragEnterEvent和dragLeaveEvent在鼠标拖动时调用,而不是在鼠标进入或退出时调用,而且还引用编写它的类,在本例中是窗口而不是框架,因此它是不合适的。

如果您希望收到无法作为框架覆盖的对象的事件通知,请使用 QEvent::EnterQEvent::Leave 类型的事件安装事件过滤器.

from PyQt5 import QtCore, QtWidgets, uic

class Principal(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(Principal, self).__init__(parent)
uic.loadUi("other.ui",self)
self.frame.installEventFilter(self)

def eventFilter(self, watched, event):
if self.frame is watched:
if event.type() == QtCore.QEvent.Enter:
self.frame.resize(50, self.frame.height())
elif event.type() == QtCore.QEvent.Leave:
self.frame.resize(100, self.frame.height())
return super(Principal, self).eventFilter(watched, event)

if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
p = Principal()
p.show()
sys.exit(app.exec_())
<小时/>

另一方面,作为对不稳定区域逻辑的观察:

  1. 考虑鼠标最初的位置在框架之外。

  2. 将鼠标放置在相对于框架的右侧位置 90 后,由于其逻辑位于框架内,因此必须将其宽度更改为 50。

  3. 随着更改,鼠标将位于框架外部,因此宽度将更改为框架内部的 100,我们将返回到步骤 2,生成宽度的振荡。

关于python - 如何通过将光标放在框架内来调整框架大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53625889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com