【问题标题】:how to connect a lineEdit with a function that defines a variable?如何将 lineEdit 与定义变量的函数连接起来?
【发布时间】:2020-01-15 07:54:25
【问题描述】:

我希望我能正确解释我的问题。我有一个带有 lineEdits 的 pyQt5 GUI,例如 lEUMDicke。当文本更改时,我想定义一个变量,例如 UMDicke,其函数将 , 更改为 .并将变量读取为浮点数。我的python版本是3.7。

class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):

    def __init__(self):
        self.lEUMDicke.textChanged.connect(lambda self.UMDicke: (self.vardecl(self.lEUMDicke)))

    def vardecl(self,varstring):
        try:
            r = varstring.replace(",",".")
            rvalue = float(r)
        except:
            None
        return rvalue

非常感谢每一个回答

【问题讨论】:

    标签: python pyqt pyqt5 signals python-3.7


    【解决方案1】:

    如果您将 lEUMDicke 设为类变量,则无需将其作为参数传递,因为可以使用 self 关键字访问它。此外,使用裸 except 是不好的做法,尤其是其中只有 None 。如果发生了您不期望的错误,您通常希望程序崩溃,以便您知道发生了什么。就预期错误而言,我认为(可能是错误的)python 如果无法转换为浮点数会抛出 ValueError,因此只需尝试捕获 ValueError。

    还有一个'Validator'类是Qt,它可以帮助防止用户输入字母等。

    '''

    class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
    
    def __init__(self):
        self.lEUMDicke = QLineEdit()
        self.lEUMDicke.setValidator(QDoubleValidator())
        self.lEUMDicke.textChanged.connect(self.vardecl)
    
    @pyqtSlot()
    def vardecl(self):
        try:
            r = self.lEUMDicke.text().replace(",",".")
            rvalue = float(r)
        except ValueError:
            print("Cannot convert to float")
            return -1
        return rvalue
    

    '''

    【讨论】:

    • 感谢您的回复,我尝试了代码,但我还有一些问题:我有很多变量,所以我想为每个变量定义一个函数。那可能吗? lEUMDicke 是 LineEdit,UMDicke 是变量,你的代码对吗?
    • 我不太明白这个问题。如果其他变量也将从 QLineEdit 转换为浮点数,只需将它们连接到 vardecl 函数,(但在这种情况下,您将需要传递参数)。否则,您必须创建新功能。
    猜你喜欢
    • 2011-05-13
    • 2014-03-19
    • 1970-01-01
    • 2014-12-13
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2020-06-20
    相关资源
    最近更新 更多