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



我有两个只接受数值的行编辑(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_())

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

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)

相关内容

  • 没有找到相关文章

最新更新