【问题标题】:Is it possible to shorten the code in PyQt5 by sticking lineEdit in for?是否可以通过粘贴 lineEdit 来缩短 PyQt5 中的代码?
【发布时间】:2022-01-21 00:08:11
【问题描述】:

我有 7 个 lineEdit 块,我希望 textChanged 函数在它们中的任何一个发生变化时触发,我决定采用简单的方法并按顺序将它们写出来,但现在我想缩短我的代码。

我想把这个做空

        self.lineEdit_2.textChanged.connect(self.textChanged)
        self.lineEdit_3.textChanged.connect(self.textChanged)
        self.lineEdit_4.textChanged.connect(self.textChanged)
        self.lineEdit_5.textChanged.connect(self.textChanged)
        self.lineEdit_6.textChanged.connect(self.textChanged)
        self.lineEdit_7.textChanged.connect(self.textChanged)
        self.lineEdit_8.textChanged.connect(self.textChanged)

喜欢这个

        for n in range(2, 8):  #check changes on the all lineEdit units
            self.lineEdit_n.textChanged.connect(self.textChanged)

或者像这样

        for n in range(2, 8):
            self.lineEdit_n.textChanged.connect(self.textChanged)
            getattr(self, 'lineEdit_n%' % n).textChanged.connect(self.textChanged)

但它不起作用 感谢您的关注

【问题讨论】:

  • Jérôme 对 f 弦的回答很好。你快到了。我不知道你为什么尝试'lineEdit_n' % n,因为它没有任何意义。 f-strings 是更好的选择,但如果你想保持你的方法,那就是'lineEdit_%d' % n
  • 最好将数据保留在列表 self.lineEdit = [] 上,而不是分隔变量。

标签: python pyqt5


【解决方案1】:
# Check changes on all lineEdit units
for n in range(2, 9):
    getattr(self, f"lineEdit_{n}").textChanged.connect(self.textChanged)

【讨论】:

  • 确实如此。我想我会将 lineEdits 放在一个列表中,而不是依赖这样的名称。由你决定。
  • 我不知道该怎么做。 list = ["lineEdit_2", "lineEdit_3", "lineEdit_4", "lineEdit_5", "lineEdit_6", "lineEdit_7", "lineEdit_8"] for i in range list: self.i.textChanged.connect(self..textChanged) 那样?
  • 有点,但不是字符串。无论如何,这实际上取决于整个代码。我不知道,甚至可能有更好的方法将它们分组。
  • @AlmazIslamov self.lineEdits = [getattr(self, f'lineEdit_{n}') for n in range(2, 9)] 然后for lineEdit in self.lineEdits: lineEdit.textChanged.connect(...),但这仅在您需要在代码中的其他位置再次循环通过这些行编辑时才有用。注意:list 是一个受保护的字,你不应该把它用作变量名。
猜你喜欢
  • 2022-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多