我跟踪一些非常小的变量(小于 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_velocity
、target_y_velocity
、target_x_acceleration
和 target_y_acceleration
。
最佳答案
您必须将%d
更改为%f
,第一个仅显示整个部分,而第二个以 float 格式显示。您还可以更改为 "%.Xf"
,其中 X
是要显示的小数位数。
更多信息:
完整代码:
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_())
输出:
关于python - 如何使用未舍入的变量值更新 PyQt5 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41770072/