首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过鼠标事件PyQt在PyQt窗口中创建一行

通过鼠标事件PyQt在PyQt窗口中创建一行
EN

Stack Overflow用户
提问于 2013-09-14 06:18:36
回答 1查看 3.2K关注 0票数 2

我正在尝试创建一个场景,我需要从mousePressEvent位置到最新的鼠标moveposition之间划线,这意味着我需要从mousePressEvent调用paintEvent,这是可能的吗?

所以场景是这样的:

1)使用paintEvent绘制了一个黑色的2个圆

2)鼠标按下事件等待事件发生,我想把圆圈的颜色改成绿色,可以吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys, random
from PyQt4 import QtGui, QtCore

class P(QtGui.QWidget):

    def __init__(self):
        super(P, self).__init__()

        self.initUI()

    def initUI(self):
        q=self.frameGeometry()
        cp=QtGui.QDesktopWidget().availableGeometry().center()
        q.moveCenter(cp)
        self.setFixedSize(300,300)
        self.setWindowTitle('Points')
        self.show()

    def mousePressEvent(self, QMouseEvent):
        cursor =QtGui.QCursor(self)
        position = QMouseEvent.pos()
        xpos = QMouseEvent.x()
        ypos = QMouseEvent.y()

        #Trial ??????
        q = QtGui.QPainter()
        q.drawLine(30,30,90,90)

        print QMouseEvent.pos()

    def mouseReleaseEvent(self, QMouseEvent):
        cursor =QtGui.QCursor()
        print cursor.pos()

    def paintEvent(self,e):
        qp = QtGui.QPainter()
        qp.begin(self)

        E1 = qp.drawEllipse(30,30,20,20)
        E2 = qp.drawEllipse(30,130,20,20)

def main():

    app = QtGui.QApplication(sys.argv)
    ex = P()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

简而言之,我需要知道我们是否可以从一个事件中调用另一个事件,即鼠标按下事件中的绘制事件?

EN

回答 1

Stack Overflow用户

发布于 2013-09-15 08:58:44

paintEvent处理程序中完成所有绘制是一个更好的主意。

您应该使用鼠标事件处理程序来处理数据(起始点、长度等)的收集,然后在paintEvent中执行实际的重绘。

一旦您在鼠标事件处理程序中收集了新数据,就可以通过调用update函数来告诉QWidget它需要重新绘制。这将调度一个绘制事件,该事件将在程序返回到事件循环时执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18798951

复制
相关文章
C++(STL):13--- list插入和访问元素
前面章节介绍了如何创建 list 容器,在此基础上,本节继续讲解如何向现有 list 容器中添加或插入新的元素。 list 模板类中,与“添加或插入新元素”相关的成员方法有如下几个:
用户3479834
2021/02/03
2.4K0
C++ 插入排序,冒泡排序和选择排序
大学的时候学过C,现在已经忘得七七八八了,现在想再学一下C/C++。 刚试着重写/温习了3个最简单的排序算法。 插入排序:依次将右边未排序的元素插入到左边已排序序列的合适位置。 时间复杂度:O(n^2
用户6021899
2020/02/19
1.2K0
【C++】AVL树和红黑树的插入
1. 虽然二叉搜索树的搜索效率很高,当搜索树接近满二叉树时,搜索效率可以达到logN,但是如果数据是有序的,则二叉搜索树会退化为单支树,搜索效率和普通的序列式容器相同了就,所以在搜索树的基础上,两位俄罗斯数学家研究出了平衡搜索树。
举杯邀明月
2023/04/12
6680
【C++】AVL树和红黑树的插入
【C++】流插入、提取运算符和类型转换
我们可以使用cout对一个int,string等等类型的数据进行输出,我们却不可以对我们自己定义的一个类的对象进行直接输出,因为我们这个类是没有”<<”运算符的。
谙忆
2021/01/21
6890
【C++】流插入、提取运算符和类型转换
字符串插入(C++)
有两个字符串str和substr,str和substr的字符个数不超过10^5,只包含大小写字母和数字。(字符个数不包括字符串结尾处的'\0'。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。
喜欢ctrl的cxk
2022/05/07
8800
【C++】数组插入哈希表
第三种的话,我本来就是要大量插入定长数组的,用不着扩容,vector是类,杀鸡焉用牛刀呢。。。
看、未来
2021/12/17
1.1K0
2.1 C++ STL 数组向量容器
Vector容器是C++ STL中的一个动态数组容器,可以在运行时动态地增加或减少其大小,存储相同数据类型的元素,提供了快速的随机访问和在末尾插入或删除元素的功能。
微软技术分享
2023/08/16
2080
向量6(继承)栈操作 C++
定义CStack类实现栈操作。CStack类继承CVector类,新增私有数据成员:
叶茂林
2023/07/30
1150
2.1 C++ STL 数组向量容器
Vector容器是C++ STL中的一个动态数组容器,可以在运行时动态地增加或减少其大小,存储相同数据类型的元素,提供了快速的随机访问和在末尾插入或删除元素的功能。
微软技术分享
2023/10/11
2020
C++ 流插入和流提取运算符的重载
假定我们要想把某个对象里的内容进行打印输出,那么我们可以重载 ostream 类的流插入 << 运算符。
小林coding
2020/03/31
1.1K0
C++ 流插入和流提取运算符的重载
使用R语言在向量的任何位置插入任何元素
然后学员有任意需求,任意位置添加任意数字,这样写会比较麻烦,每次都有手动判断向量长度,范围等等,因为她是初学者,所以不可能会无限R包和函数,我这里简单演示一下:
生信技能树
2019/11/06
6.9K0
使用R语言在向量的任何位置插入任何元素
向量内积_向量的内积和外积公式
在数学中,数量积(dot product; scalar product,也称为点积)是接受在实数R上的两个 向量并返回一个实数值 标量的 二元运算。它是 欧几里得空间的标准 内积。 [1]
全栈程序员站长
2022/11/09
1K0
向量内积_向量的内积和外积公式
MATLAB 向量和矩阵
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:MATLAB 向量和矩阵 ---- MATLAB 向量和矩阵 1.输入数组 2.创建等间距向量 2.1 通过间距创建等间距向量 2.2 通过元素数目创建等间距向量 2.3 等间距列向量 3.数组创建函数 ---- 1.输入数组 MATLAB 中的每个数值变量都是一个数组,单个称为标量的数值实际上是一个 1×1
小嗷犬
2022/11/15
8730
排序技术:插入排序(C++实现)
详情见代码注释。 #include <iostream> using namespace std; void insertSort(int arr[], int length) { //传入的数组的第一个位置为哨岗 for (int i = 2; i < length; i++) { //对数组中的每一个元素进行插入排序 //因为数组中第一个元素即是最大值,也是最小值 //不需要进行任何判断和操作,循环从 2 开始 arr[0] = arr[i];//哨兵设置为当前进行插
英雄爱吃土豆片
2020/11/12
7130
排序技术:插入排序(C++实现)
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入
        操作系统是Windows10 64bit,编译器是 Microsoft Virtual Studio Community 10。编译产出是64位测试程序。(转载请指明出于breaksoftware的csdn博客)
方亮
2019/01/16
1.9K0
向量1(类和对象)
n个有序数a1,a2,...,an组成的数组称为n维向量。 为n维向量定义CVector类,包含私有数据成员:
叶茂林
2023/07/30
1530
C++ set容器元素的插入与遍历
set<string>::iterator iter=set_str.begin();
用户7886150
2021/01/17
2.3K0
单链表的插入删除操作(c++实现)[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116229.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
8390
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入
        操作系统是ubuntu 18.04.1 server amd64,gcc是 7.3.0。编译产出是64位测试程序。(转载请指明出于breaksoftware的csdn博客)
方亮
2019/01/16
9280
C++经典算法题-选择、插入、气泡排序
选择排序(Selection sort)、插入排序(Insertion sort)与气泡排序(Bubble sort)这三个排序方式是初学排序所必须知道的三个基本排序方式,它们由于速度不快而不实用(平均与最快的时间复杂度都是O(n2)), 然而它们排序的方式确是值得观察与探讨的。
cwl_java
2020/02/13
6360

相似问题

C++向量和列表插入

40

插入C++向量

24

插入向量c++

32

C++向量插入[]

11

C++向量插入和迭代器混淆

20
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文