【问题标题】:Call function via for loop with functons as a list of strings通过 for 循环调用函数,函数作为字符串列表
【发布时间】:2018-06-03 23:25:18
【问题描述】:

我正在尝试编写一个 PyQt5 应用程序。列表变量中的所有列表项都是表单的 LineEdit 对象。在调用重置函数时,我希望将它们设置为我尝试为其编写 for 循环而不是硬编码的特定值。

但是,我不能将变量中的列表项用作对象,因为它们是其他文件中的对象属性并且正在做

self.eval(variables[i]).setText(default_0_values[i])

不起作用,因为 eval 不是 self 的属性。 但是,如果我运行

self.nGASLineEdit.setText(2)

有效。但我似乎无法自动化它,我被卡住了。需要解决这个问题。

from PyQt5 import QtCore,QtGui,QtWidgets,uic

variables=[
'nGASLineEdit','nDELTALineEdit','iMIPLineEdit','nDVECLineEdit','nSEEDLineEdit','eSTARTLineEdit','eTHRMLineEdit','eCUTLineEdit','nGAS1LineEdit','nGAS2LineEdit','nGAS3LineEdit','nGAS4LineEdit','nGAS5LineEdit','nGAS6LineEdit','fRAC1LineEdit','fRAC2LineEdit','fRAC3LineEdit','fRAC4LineEdit','fRAC5LineEdit','fRAC6LineEdit','tEMPLineEdit','tORRLineEdit','eFIELDLineEdit','bMAGLineEdit','bTHETALineEdit','iWRITELineEdit','iPENLineEdit','dETEFFLineEdit','eXCWGHTLineEdit','kGASLineEdit','lGASLineEdit','lCMPLineEdit','lRAYLineEdit','lPAPLineEdit','lBRMLineEdit','iECASCLineEdit'
]

default_0_values=[
2,100,5,1,0,1.0,1.5,2.0,
2 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
]

class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super(Window,self).__init__()
        uic.loadUi('main.ui',self)
        self.pushButton_2.clicked.connect(lambda: self.reset())

    def select_func(self,func_name):
        return func_name

    def reset(self):
        global variables
        global default_0_values
        for i in range(len(variables)):
            self.eval(variables[i]).setText(default_0_values[i])




if __name__=='__main__':
    import sys
    app=QtWidgets.QApplication(sys.argv)
    window=Window()
    window.show()
    sys.exit(app.exec())

UI file in .ui format

UI file in .py format

【问题讨论】:

  • 请出示你的 .ui
  • @eyllanesc 更新为有问题的链接

标签: python python-3.x function pyqt pyqt5


【解决方案1】:

使用eval 是一种不好的编程习惯,在这种情况下它是不必要的,除了使用self.eval(...) 之外,这些都表明 eval 是 Window 类的函数,显然它不是......另一方面如果您只读取变量,则无需使用global。相反,我们可以使用getattr(),如下所示:

from PyQt5 import QtCore,QtGui,QtWidgets,uic

variables=['nGASLineEdit','nDELTALineEdit','iMIPLineEdit','nDVECLineEdit','nSEEDLineEdit','eSTARTLineEdit','eTHRMLineEdit','eCUTLineEdit','nGAS1LineEdit','nGAS2LineEdit','nGAS3LineEdit','nGAS4LineEdit','nGAS5LineEdit','nGAS6LineEdit','fRAC1LineEdit','fRAC2LineEdit','fRAC3LineEdit','fRAC4LineEdit','fRAC5LineEdit','fRAC6LineEdit','tEMPLineEdit','tORRLineEdit','eFIELDLineEdit','bMAGLineEdit','bTHETALineEdit','iWRITELineEdit','iPENLineEdit','dETEFFLineEdit','eXCWGHTLineEdit','kGASLineEdit','lGASLineEdit','lCMPLineEdit','lRAYLineEdit','lPAPLineEdit','lBRMLineEdit','iECASCLineEdit']

default_0_values=[2,100,5,1,0,1.0,1.5,2.0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super(Window,self).__init__()
        uic.loadUi('main.ui',self)
        self.pushButton_2.clicked.connect(self.reset)

    def reset(self):
        for le, val in zip(variables, default_0_values):
            getattr(self, le).setText(str(val))

if __name__=='__main__':
    import sys
    app=QtWidgets.QApplication(sys.argv)
    window=Window()
    window.show()
    sys.exit(app.exec())

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多