如何连接两个QLineEdit以具有相同的输入(由QCheckBox控制)

2024-09-29 02:24:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两行编辑(le_Ale_B),它们只接受数值和一个复选框(chk_box)。每当检查chk_box(其中chk_box是“控制器”)时,我在使le_Ale_B具有相同的输入(请参见下面的场景2)方面遇到问题

示例场景:

  • 场景1.用户可以在le_Ale_B中的任何值中输入未选中的值。例如,le_A中的值是10,而le_B中的值是20。

  • 场景2.选中时,用户在le_Ale_B中输入的任何值都将相同。例如,如果我在le_A中输入10,le_B将是10。在le_B中完成的输入也是如此-相同的值将显示在le_A

代码:

class CustomTest(QtGui.QWidget):
    def __init__(self, parent=None):
        super(CustomTest, self).__init__(parent)

        # Only numeric values
        self.le_A = QtGui.QLineEdit()        
        self.le_B = QtGui.QLineEdit()

        self.chk_box = QtGui.QCheckBox()

        lyt = QtGui.QHBoxLayout()
        lyt.addWidget(self.le_A)
        lyt.addWidget(self.le_B)
        lyt.addWidget(self.chk_box)

        self.setLayout(lyt)

        self.set_connections()

    def set_connections(self):
        self.chk_box.stateChanged.connect(self.chk_toggle)

    def chk_toggle(self):
        chk_value = self.chk_box.isChecked()
        a_val = self.le_A.text()
        b_val = self.le_B.text()

        # Inputs in either le_A and le_B should be the same
        if chk_value:
            # If the values are different, always use a_val as the base value
            if a_val != b_val:
                self.le_B.setText(str(b_val))
        else:
            # Inputs in either le_A and le_B can be different
            # Currently this is working
            pass

    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        w = CustomTest()
        w.show()
        sys.exit(app.exec_())

Tags: the用户selfleboxifvaluedef
1条回答
网友
1楼 · 发布于 2024-09-29 02:24:38

因此,如果我正确理解您的要求,选中复选框时,您希望同步行编辑的文本,然后在用户输入任何新文本时保持它们不变。如果是这样,以下更改将实现:

class CustomTest(QtGui.QWidget):
    ...
    def set_connections(self):
        self.chk_box.stateChanged.connect(self.change_text)
        self.le_A.textChanged.connect(self.change_text)
        self.le_B.textChanged.connect(self.change_text)

    def change_text(self, text):
        if self.chk_box.isChecked():
            sender = self.sender()
            if sender is self.chk_box:
                self.le_B.setText(self.le_A.text())
            elif sender is self.le_A:
                self.le_B.setText(text)
            else:
                self.le_A.setText(text)

相关问题 更多 >