当光标在PyQt4中时,如何使qframe高亮显示?

2024-03-29 14:00:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的带边框的窗户。在

我希望当鼠标在其区域内时,框架被突出显示(在我的例子中,改变它的形状)。在

from PyQt4 import QtGui, QtCore
import sys

app = QtGui.QApplication(sys.argv)

window = QtGui.QWidget()
window_layout = QtGui.QVBoxLayout()
window.setLayout(window_layout)

#fill content
for i in range(10):
    label = QtGui.QLabel(str(i))
    frame = QtGui.QFrame()
    frame_layout = QtGui.QVBoxLayout()
    frame.setLayout(frame_layout)
    frame_layout.addWidget(label)
    window_layout.addWidget(frame)

def layout_widgets(layout):
   return (layout.itemAt(i) for i in range(layout.count()))

def mouse_enter(event):
    print 'frame enter'
    w.widget().setFrameShape(3)

def mouse_leave(event):
    print 'frame leave'
    w.widget().setFrameShape(0)

for w in layout_widgets(window_layout):
    print w.widget()

    w.widget().enterEvent = mouse_enter
    w.widget().leaveEvent = mouse_leave

window.show()
sys.exit(app.exec_())

它可以工作,但只高亮显示布局中的最后一帧。 如何使鼠标所在的位置只改变帧的形状?在

我试过以下方法:

^{pr2}$

但它给出了一个错误。我找到了另一种方法-信号映射器 但我不知道如何使用它。在


Tags: inimportfordefsyswidgetwindowframe
1条回答
网友
1楼 · 发布于 2024-03-29 14:00:54

代码中的问题是,在执行for时变量w保留在最后一个元素中,因此它只在后一个元素中执行。为了解决这个问题,我实现了一个从QFrame继承的Frame类,其中我覆盖了enterEvent和{}函数。在

from PyQt4 import QtGui, QtCore
import sys


class Frame(QtGui.QFrame):
    def __init__(self, text, parent=None):
        super(Frame, self).__init__(parent=parent)
        label = QtGui.QLabel(text)
        frame_layout = QtGui.QVBoxLayout()
        frame_layout.addWidget(label)
        self.setLayout(frame_layout)

    def enterEvent(self, event):
        self.setFrameShape(3)

    def leaveEvent(self, event):
        self.setFrameShape(0)

app = QtGui.QApplication(sys.argv)

window = QtGui.QWidget()
window_layout = QtGui.QVBoxLayout()
window.setLayout(window_layout)

for i in range(10):
    frame = Frame(str(i))
    window_layout.addWidget(frame)

window.show()
sys.exit(app.exec_())

enter image description here

相关问题 更多 >