首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >鼠标单击无法移动QGraphicsRectItem

鼠标单击无法移动QGraphicsRectItem
EN

Stack Overflow用户
提问于 2017-07-02 10:58:11
回答 1查看 45关注 0票数 0

我将QGraphicsRectItem()定义为

代码语言:javascript
复制
def create_blocks(self):
    """
    Creates block rectangles and adds them to scene.
    """
    for i in range(self.nrows):
        line_block = []
        for j in range(self.ncols):
            block = QGraphicsRectItem(0, 0, 100, 100)
            block.setPos(j * 100, i * 100)
            self.scene.addItem(block)
            line_block.append(block)
        self.block_array.append(line_block)

这些rect项目的填写方式如下:

代码语言:javascript
复制
def fillData(self):
    """
    Fill puzzle blocks with numbers and remove SPACER block.
    Fills puzzle block with color - zigzag
    """
    color1 = Qt.lightGray
    color2 = Qt.gray
    last_color = color1
    color_table = {}

    # generate dict with color for each number (1-lgray, 2-gray, 3-lgray, etc.)
    keys = xrange(1, 16)
    for key in keys:
        color_table[key] = last_color
        last_color = color1 if last_color == color2 else color2

    for j in range(self.ncols):
        for i in range(self.nrows):
            block = self.block_array[i][j]
            blockBoundRect = block.boundingRect()
            block.mousePressEvent(Qt.LeftButton)
            num = self.init_data[i][j]
            if num == self.SPACER:
                self.scene.removeItem(block)
                continue
            else:
                text = str(num)
                block.setBrush(QColor(color_table[num]))

            textItem = QGraphicsSimpleTextItem(text, block)
            font = textItem.font()
            font.setPixelSize(50)
            textItem.setFont(font)
            textItemBoundRect = textItem.boundingRect()
            new_x = blockBoundRect.width() / 2.0 - textItemBoundRect.width() / 2.0
            new_y = blockBoundRect.height() / 2.0 - textItemBoundRect.height() / 2.0
            textItem.setPos(new_x, new_y)

block.mousePressEvent(Qt.LeftButton)

使用这一行时,我试图启用对矩形的单击,但到目前为止,我无法这样做。我需要有人帮助我指出我的逻辑写在哪里,如果按钮点击,旁边的空白位置,移动矩形。

我正试图在python中制作一个15个益智游戏,我已经将后端代码连接到GUI,解决程序部分工作得很好。我以前没有使用QT的经验,我基本上是一个python脚本编写者noob。

EN

回答 1

Stack Overflow用户

发布于 2017-07-03 05:57:48

您应该在项目创建后设置这些标志:

代码语言:javascript
复制
block.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
block.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44870064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档