【问题标题】:How to use QRubberBand with QRect Class in PyQt?如何在 PyQt 中将 QRubberBand 与 QRect 类一起使用?
【发布时间】:2012-12-13 03:04:13
【问题描述】:

我想在 PyQt 中使用 QrubberBand 和 QRect 在 UI 中通过选取框矩形选择来选择或激活一堆按钮。

如果有人能告诉我如何实现此功能,我将不胜感激?

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    这是一个简单的演示:

    from PyQt4 import QtGui, QtCore
    
    class Window(QtGui.QWidget):
        def __init__(self):
            QtGui.QWidget.__init__(self)
            layout = QtGui.QVBoxLayout(self)
            layout.setMargin(15)
            layout.setSpacing(10)
            for text in 'One Two Three Four Five'.split():
                layout.addWidget(QtGui.QPushButton(text, self))
            self.rubberband = QtGui.QRubberBand(
                QtGui.QRubberBand.Rectangle, self)
            self.setMouseTracking(True)
    
        def mousePressEvent(self, event):
            self.origin = event.pos()
            self.rubberband.setGeometry(
                QtCore.QRect(self.origin, QtCore.QSize()))
            self.rubberband.show()
            QtGui.QWidget.mousePressEvent(self, event)
    
        def mouseMoveEvent(self, event):
            if self.rubberband.isVisible():
                self.rubberband.setGeometry(
                    QtCore.QRect(self.origin, event.pos()).normalized())
            QtGui.QWidget.mouseMoveEvent(self, event)
    
        def mouseReleaseEvent(self, event):
            if self.rubberband.isVisible():
                self.rubberband.hide()
                selected = []
                rect = self.rubberband.geometry()
                for child in self.findChildren(QtGui.QPushButton):
                    if rect.intersects(child.geometry()):
                        selected.append(child)
                print 'Selection Contains:\n ',
                if selected:
                    print '  '.join(
                        'Button: %s\n' % child.text() for child in selected)
                else:
                    print ' Nothing\n'
            QtGui.QWidget.mouseReleaseEvent(self, event)
    
    if __name__ == '__main__':
    
        import sys
        app = QtGui.QApplication(sys.argv)
        window = Window()
        window.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 太棒了.. ekhumoro 这就是我想要的.. 感谢您的回复和简单的演示代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2023-04-06
    • 2019-07-05
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多