python - 如何使用未舍入的变量值更新 PyQt5 标签?

标签 python qt python-3.x pyqt pyqt5

我跟踪一些非常小的变量(小于 1),并希望用它们的值更新屏幕上的标签。但是,即使变量的值小于 1,标签仍保持为 0(有时会变为 1)。

如何告诉我的程序显式打印未舍入的值?

这是我的代码:

import sys
import random
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import (QApplication, QLabel, QWidget)
from PyQt5.QtGui import QPainter


class MouseTracker(QWidget):
    distance_from_target = 0
    mouse_x_pos = 0
    mouse_y_pos = 0
    target_x_pos = 0
    target_y_pos = 0
    target_x_velocity = 0
    target_y_velocity = 0
    target_x_acceleration = 0
    target_y_acceleration = 0

    def __init__(self, parent=None):
        super(MouseTracker, self).__init__(parent=parent)
        self.initUI()
        self.setMouseTracking(True)
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.changePosition)
        self.timer.start(1)

    def changePosition(self):
        random.seed()
        self.target_x_acceleration = random.randint(-10, 10) / 100
        self.target_y_acceleration = random.randint(-10, 10) / 100

        self.target_x_velocity += self.target_x_acceleration
        self.target_y_velocity += self.target_y_acceleration

        self.target_x_pos += self.target_x_velocity
        self.target_y_pos += self.target_y_velocity

        self.distance_from_target = round(
            ((self.mouse_y_pos - self.target_y_pos) ** 2 + (self.mouse_x_pos - self.target_x_pos) ** 2) ** 0.5)
        self.label.setText(
            'Mouse: (%d : %d)' % (self.mouse_x_pos, self.mouse_y_pos) + "   Distance from target: " + str(self.distance_from_target)
            + "\nTarget position: (%d : %d)" % (self.target_x_pos, self.target_y_pos)
            + "\nTarget velocity: (%d : %d)" % (self.target_x_velocity, self.target_y_velocity)
            + "\nTarget acceleration: (%d : %d)" % (self.target_x_acceleration, self.target_y_acceleration))
        self.update()

    def initUI(self):
        self.setGeometry(200, 200, 1000, 500)
        self.setWindowTitle('Mouse Tracker')
        self.label = QLabel(self)
        self.label.resize(500, 100)
        self.show()

    def mouseMoveEvent(self, event):
        self.mouse_x_pos = event.x()
        self.mouse_y_pos = event.y()
        self.update()

    def mousePressEvent(self, event):
        self.target_x_velocity = 0
        self.target_y_velocity = 0
        self.target_x_acceleration = 0
        self.target_y_acceleration = 0 
        self.target_x_pos = event.x()
        self.target_y_pos = event.y()
        self.distance_from_target = round(
            ((self.mouse_y_pos - self.target_y_pos) ** 2 + (self.mouse_x_pos - self.target_x_pos) ** 2) ** 0.5)
        self.update()

    def paintEvent(self, event):
        q = QPainter()
        q.begin(self)
        q.drawLine(self.mouse_x_pos, self.mouse_y_pos, self.target_x_pos, self.target_y_pos)
        q.drawEllipse(self.target_x_pos - self.distance_from_target, self.target_y_pos - self.distance_from_target, self.distance_from_target*2, self.distance_from_target*2)

app = QApplication(sys.argv)
w = MouseTracker()
sys.exit(app.exec_())

相关变量为 target_x_velocitytarget_y_velocitytarget_x_accelerationtarget_y_acceleration

最佳答案

您必须将%d更改为%f,第一个仅显示整个部分,而第二个以 float 格式显示。您还可以更改为 "%.Xf",其中 X 是要显示的小数位数。

更多信息:

enter image description here

完整代码:

import sys
import random
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import (QApplication, QLabel, QWidget)
from PyQt5.QtGui import QPainter


class MouseTracker(QWidget):
    distance_from_target = 0
    mouse_x_pos = 0
    mouse_y_pos = 0
    target_x_pos = 0
    target_y_pos = 0
    target_x_velocity = 0
    target_y_velocity = 0
    target_x_acceleration = 0
    target_y_acceleration = 0

    def __init__(self, parent=None):
        super(MouseTracker, self).__init__(parent=parent)
        self.initUI()
        self.setMouseTracking(True)
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.changePosition)
        self.timer.start(1)

    def changePosition(self):
        random.seed()
        self.target_x_acceleration = random.randint(-10, 10) / 100
        print(self.target_x_acceleration)
        self.target_y_acceleration = random.randint(-10, 10) / 100

        self.target_x_velocity += self.target_x_acceleration
        self.target_y_velocity += self.target_y_acceleration

        self.target_x_pos += self.target_x_velocity
        self.target_y_pos += self.target_y_velocity

        self.distance_from_target = round(
            ((self.mouse_y_pos - self.target_y_pos) ** 2 + (self.mouse_x_pos - self.target_x_pos) ** 2) ** 0.5)
        self.label.setText(
            'Mouse: (%d : %d)' % (self.mouse_x_pos, self.mouse_y_pos) + "   Distance from target: " + str(self.distance_from_target)
            + "\nTarget position: (%d : %d)" % (self.target_x_pos, self.target_y_pos)
            + "\nTarget velocity: (%f : %f)" % (self.target_x_velocity, self.target_y_velocity)
            + "\nTarget acceleration: (%f : %f)" % (self.target_x_acceleration, self.target_y_acceleration))
        self.update()

    def initUI(self):
        self.setGeometry(200, 200, 1000, 500)
        self.setWindowTitle('Mouse Tracker')
        self.label = QLabel(self)
        self.label.resize(500, 100)
        self.show()

    def mouseMoveEvent(self, event):
        self.mouse_x_pos = event.x()
        self.mouse_y_pos = event.y()
        self.update()

    def mousePressEvent(self, event):
        self.target_x_velocity = 0
        self.target_y_velocity = 0
        self.target_x_acceleration = 0
        self.target_y_acceleration = 0 
        self.target_x_pos = event.x()
        self.target_y_pos = event.y()
        self.distance_from_target = round(
            ((self.mouse_y_pos - self.target_y_pos) ** 2 + (self.mouse_x_pos - self.target_x_pos) ** 2) ** 0.5)
        self.update()

    def paintEvent(self, event):
        q = QPainter()
        q.begin(self)
        q.drawLine(self.mouse_x_pos, self.mouse_y_pos, self.target_x_pos, self.target_y_pos)
        q.drawEllipse(self.target_x_pos - self.distance_from_target, self.target_y_pos - self.distance_from_target, self.distance_from_target*2, self.distance_from_target*2)

app = QApplication(sys.argv)
w = MouseTracker()
sys.exit(app.exec_())

输出:

enter image description here

关于python - 如何使用未舍入的变量值更新 PyQt5 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41770072/

相关文章:

python - GroupBy Pandas 计算连续的零

python - 无法使用搜索关键字解析网页中的某些信息

Python 2.7编辑一串字符

qt - 如何使用 Qt Quick Controls 显示消息框?

c++ - Qt QTableView 实现切换按钮和复选框委托(delegate)

python-3.x - Keras 中的 model.evaluate() 未覆盖所有数据点

python - celery:通过任务id获取函数名称?

python - Python OpenGL、PyQt 和 Legacy OpenGL 兼容性出了什么问题?

Python:以科学记数法打印数字列表

Python - 捕获无人机程序的任何错误