非常に小さい(1より小さい)いくつかの変数を追跡し、その値で画面上のラベルを更新したいと考えています。ただし、変数の値が1より小さい場合でも、ラベルは0(1になることもあります)にとどまります。丸められた変数値でPyQt5ラベルを更新するには?
丸め値を明示的に印刷するようにプログラムに指示するにはどうすればよいですか?問題の
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
を、次のとおりです。
は、ここに私のコードです。
上記リンクを参照するための
'%'構文はいません推奨されていません。現時点では、リンクされたPEPで明示されているように、言語からいつ削除されるか、または削除される予定はありません(下位互換性のセクションを参照)。 – ekhumoro
@ekhumoro:私は確信していません。そのテキストは2006年4月16日に公開されています。 2008年12月4日に公開された他のリンク、https://docs.python.org/release/3.0/whatsnew/3.0.html#pep-3101-a-new-approach-to-stringでは時代遅れです-formatting –
PEPSは必要に応じて最新の状態に保たれます(履歴を参照)。 3.0のドキュメントは無関係です。機能が廃止されているかどうかを知りたい場合は、[警告オプション](https://docs.python.org/3.6/using/cmdline.html#cmdoption-W)を使用してテストしてください: 'python3 -Wall -c '"%s"%False''。おそらく、 '%'の書式設定を廃止する計画を廃止したというpython-devの議論があります。正当な理由がないために大量のコードが破損する可能性があるため、Python 3ではこれが削除される可能性は非常に低いようです。 – ekhumoro