当前位置: 首页 > 面试题库 >

Python PyQt:如何用鼠标在窗口上移动小部件?

孙成益
2023-03-14
问题内容

我是Python的新手。我绘制了具有固定坐标的多边形和圆形。现在,我想使用鼠标将此多边形和圆移动到窗口上的其他位置。请指导我该怎么做?

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class MyFrame(QWidget):
    def __init__(self, parent=None):
            QWidget.__init__(self)

    def paintEvent(self, event=None):
            paint=QPainter(self)
            paint.setPen(QPen(QColor(Qt.green).dark(150),1,Qt.SolidLine))
            segColor=QColor(Qt.green).dark(150)
            paint.setBrush(segColor)
            paint.setBrushOrigin(QPoint(225,225))
            polygon=QPolygon([QPoint(250,175), QPoint(265,175), QPoint(250,190), QPoint(265,190),QPoint(250,175)])
            paint.drawPolygon(polygon)
            paint.setPen(QPen(QColor(Qt.red),1,Qt.SolidLine))
            paint.setBrush(QBrush(Qt.NoBrush))
            polygon1=QPolygon([QPoint(250,300), QPoint(250,500), QPoint(350,500), QPoint(350,300)])
            paint.drawPolyline(polygon1)
            paint.drawEllipse(50,50,50,50)


app=QApplication(sys.argv)
f=MyFrame()
f.show()
app.exec_()

问题答案:

您应该查看QGraphicsView而不是正在执行的操作,它已经内置了所有功能

http://doc.qt.nokia.com/4.7-snapshot/qgraphicsview.html

http://doc.qt.nokia.com/4.7-snapshot/qgraphicsscene.html

from PyQt4 import QtGui, QtCore

class MyFrame(QtGui.QGraphicsView):
    def __init__( self, parent = None ):
        super(MyFrame, self).__init__(parent)

        self.setScene(QtGui.QGraphicsScene())

        # add some items
        x = 0
        y = 0
        w = 45
        h = 45
        pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.green))
        brush = QtGui.QBrush(pen.color().darker(150))

        item = self.scene().addEllipse(x, y, w, h, pen, brush)
        item.setFlag(QtGui.QGraphicsItem.ItemIsMovable)

if ( __name__ == '__main__' ):
    app = QtGui.QApplication([])
    f = MyFrame()
    f.show()
    app.exec_()

编辑:显示如何创建QPainterPath

from PyQt4 import QtGui, QtCore

class MyFrame(QtGui.QGraphicsView):
    def __init__( self, parent = None ):
        super(MyFrame, self).__init__(parent)

        scene = QtGui.QGraphicsScene()
        self.setScene(scene)

        # add some items
        x = 0
        y = 0
        w = 45
        h = 45
        pen   = QtGui.QPen(QtGui.QColor(QtCore.Qt.green))
        brush = QtGui.QBrush(pen.color().darker(150))

        item = scene.addEllipse(x, y, w, h, pen, brush)
        item.setFlag(QtGui.QGraphicsItem.ItemIsMovable)

        # create an open path
        path = QtGui.QPainterPath()
        path.moveTo(-w, -h)
        path.lineTo(-w, h)
        path.lineTo(w, h)
        path.lineTo(w, -h)

        clr   = QtGui.QColor('blue')
        clr.setAlpha(120)
        brush = QtGui.QBrush(clr)
        pen   = QtGui.QPen(QtCore.Qt.NoPen)
        fill_item = scene.addRect(-w, y, w*2, h, pen, brush)
        path_item = scene.addPath(path)

if ( __name__ == '__main__' ):
    app = QtGui.QApplication([])
    f = MyFrame()
    f.show()
    app.exec_()


 类似资料:
  • 刚刚开始使用pyplay(python 2.7,win7,i3),并在这里查看教程:http://www.pygame.org/docs/tut/intro/intro.html 当我运行代码示例时: ...从空闲或powershell,只有当鼠标在游戏窗口上移动时,游戏窗口才会更新。我原以为球只会自己弹来弹去。这种鼠标位置相关的性能是不是因为pygame/SDL处理图形模式的方式?它与硬件有关吗

  • 问题内容: 我有一个3d渲染程序,该程序根据鼠标在屏幕上的位置围绕观察者旋转世界。这条线定义了地球旋转的弧度量 其中xy [0]是屏幕中心的x坐标 这意味着观察者视野的旋转量受到鼠标可以移动的距离的限制。如果我能使鼠标回到屏幕中央,则可以解决此问题。有任何想法吗? 问题答案: 好消息是有一种方法可以做到。 中间的消息是,它没有很好的记录。 坏消息是它仅在某些平台上有效。 另一个中间消息是,您至少可

  • 问题内容: 我尝试在Linux中控制鼠标。Xlib似乎可以工作,但是当我尝试将其与OpenCV一起使用时,它会不断返回: 所以我决定写“ / dev / psaux”。代码如下: 用以下命令编译: 运行并获得 但是鼠标不会移动。然后,我打开一个新终端,输入“ sudo cat / dev / psaux”并运行“ my_psaux”。但是我什么都没有。 什么都没有写到“ / dev / psaux

  • 任务是将物理光标移动到元素。 尝试以下操作: 和以下内容:

  • 本文向大家介绍C#实现Winform鼠标拖动窗口大小时设定窗口最小尺寸的方法,包括了C#实现Winform鼠标拖动窗口大小时设定窗口最小尺寸的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现Winform鼠标拖动窗口大小时设定窗口最小尺寸的方法。分享给大家供大家参考,具体如下: winform 程序运行过程中,用户用鼠标拖动窗体大小时,如将窗体调整得极小,可能窗体上的控件就面目

  • 问题内容: Java Swing问题。 我有一个显示图表。当我将鼠标移到该图上时,我希望某些信息显示在随鼠标移动的类似工具提示的小部件上。我怎样才能最好地实现这一目标? 我想如果我知道如何在作为我的绘图画布的绝对位置内放置一个自定义项,就可以解决我的问题。然后,我可以捕获鼠标移动的事件并重新定位/更新小部件。任何其他解决方案(包括可能直接使用)也将非常受欢迎! 问题答案: 覆盖根据鼠标位置动态设置