PyQt学习记录(持续更新)

2 篇文章 0 订阅

问题1:python安装pyqt5-tools时找不到designer.exe

下图第2步找不到designer.exe

原因:design 需要单独安装。 直接用pip3 install PyQt5-tools会找不到安装文件。
解决方法:

1.手动到下面的地址下载whl。
https://github.com/altendky/pyqt5-tools/releases/tag/v5.7.dev1
2.手动安装。
pip3 install PyQt5_Tools-5.7.dev1-py3-none-any.whl


二、pyqt5中将一个view类中鼠标点击信号的结果传递到类外,供其他类使用

参考博客:pyqt5-多线程QThread类 - 天子骄龙 - 博客园

import sys
from PyQt5.QtCore import Qt, QThread,pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout,QHBoxLayout

# 主类
class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()

        self.button = QPushButton('开始', self)
        self.button.clicked.connect(self.count_func)
        self.button_2 = QPushButton('停止', self)
        self.button_2.clicked.connect(self.stop_count_func)

        self.label = QLabel('0', self)
        self.label.setAlignment(Qt.AlignCenter)

        self.my_thread = MyThread() #实例化副类对象
        self.my_thread.my_signal.connect(self.set_label_func)
        #线程自定义信号连接的槽函数

        self.h_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()
        self.h_layout.addWidget(self.button)
        self.h_layout.addWidget(self.button_2)
        self.v_layout.addWidget(self.label)
        self.v_layout.addLayout(self.h_layout)
        self.setLayout(self.v_layout)


    def stop_count_func(self):
        self.my_thread.is_on = False
        self.my_thread.count = 0

    def count_func(self):
        self.my_thread.is_on = True
        self.my_thread.start()#启动线程

    def set_label_func(self, num):
        self.label.setText(num)
        #由于自定义信号时自动传递一个字符串参数,所以在这个槽函数中要接受一个参数


class MyThread(QThread):# 副类
    my_signal = pyqtSignal(str)  #自定义信号对象。参数str就代表这个信号可以传一个字符串
    def __init__(self):
        super(MyThread, self).__init__()
        self.count = 0
        self.is_on = True


    def run(self): #线程执行函数
        while self.is_on :
            print(self.count)
            self.count += 1
            self.my_signal.emit(str(self.count))  # 将这个信号结果以str形式传递出去传给槽函数

            self.sleep(1)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于使用 PyQt 中的 QPainter 动态更新,可以通过以下步骤实现: 1. 创建一个 QWidget 子类,并在其构造函数中初始化 QPainter 对象。 2. 重写 QWidget 的 paintEvent() 方法,在其中使用 QPainter 绘制需要的图形。 3. 在需要更新图形时,调用 QWidget 的 update() 方法触发 paintEvent() 方法的调用。 下面是一个简单的示例代码: ```python from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QPen, QColor from PyQt5.QtCore import Qt import sys class MyWidget(QWidget): def __init__(self): super().__init__() self.setGeometry(100, 100, 400, 400) self.setWindowTitle('Dynamic Update') self.color = Qt.red self.pen = QPen(self.color, 5) self.painter = QPainter() def paintEvent(self, event): self.painter.begin(self) self.painter.setPen(self.pen) self.painter.drawEllipse(50, 50, 300, 300) self.painter.end() def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.color = Qt.blue elif event.button() == Qt.RightButton: self.color = Qt.green self.pen.setColor(self.color) self.update() if __name__ == '__main__': app = QApplication(sys.argv) widget = MyWidget() widget.show() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了一个 MyWidget 类,继承自 QWidget。在构造函数中初始化了 QPainter 对象和画笔对象。在 paintEvent() 方法中,我们使用 QPainter 绘制了一个椭圆。在 mousePressEvent() 方法中,我们根据鼠标按键的不同,改变了画笔的颜色,并调用了 update() 方法触发 paintEvent() 方法的调用,从而实现了动态更新

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值