我在我的應用程序中使用QLineEdit小部件來輸入和編輯數字(浮點)值。我想顯示浮點值的舍入版本,同時保持完整的內部準確性。只有在編輯QLineEdit字段時,應該顯示完整的數字位數。在不犧牲內部準確性的情況下限制pyQT QLineEdit中顯示的浮點數的數量
這是必要的,原因有三:
複雜的值需要太多的空間,我的GUI
的UI允許日誌和線性表示,我想隱藏之間選擇由此產生的數字不準確。
編輯所顯示的數值時,只需四捨五入包含並顯示在QLineEdit的價值並不像我會失去精度的選擇
是否有人知道這個問題的巧妙的解決辦法?
下面你會發現一個MWE,完整的代碼(pyfda)使用小部件和其他醜陋的東西的動態實例化。
# -*- coding: utf-8 -*-
from __future__ import print_function, division
import numpy as np
import sys
from PyQt4 import QtGui
class InputNumFields(QtGui.QWidget):
def __init__(self, parent):
super(InputNumFields, self).__init__(parent)
self.edit_input_float = 10*np.log10(np.pi) # store in log format
self._init_UI()
def _init_UI(self):
self.edit_input = QtGui.QLineEdit()
self.edit_input.editingFinished.connect(self.store_entries)
self.lay_g_main = QtGui.QGridLayout()
self.lay_g_main.addWidget(self.edit_input, 0, 0)
self.setLayout(self.lay_g_main)
self.get_entries()
def store_entries(self):
""" Store text entry as log float"""
self.edit_input_float = 10*np.log10(float(self.edit_input.text()))
self.get_entries()
def get_entries(self):
""" Retrieve float value, delog and convert to string """
self.edit_input.setText(str(10**(self.edit_input_float/10)))
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mainw = InputNumFields(None)
app.setActiveWindow(mainw)
mainw.show()
sys.exit(app.exec_())
您可以創建包含圓角版本的數量的另一變量,更新它當「主」數得到改變等 – Yegers
呀,我曾考慮過保留所有變量的「影子副本」。但是,每次點擊它或顯示模式(lin/log/...)改變時,您都必須將未截斷的值複製回QLineEdit。我仍然希望有更簡單的解決方案... – Chipmuenk