python 将字典中存在的滑块连接到字典中的条目

python Connect a slider existing in a dictionary to an entry in a dictionary

我三个相似的 slider/entry 组合需要连接到各自的合作伙伴。我遇到的问题是在使用 valueChanged 函数连接时无法识别正确的 slider/entry。

代码如下:

        def createwidgets(self):

          self.labeldic1 = {}
          self.labeldic4 = {}
          self.labeldic5 = {}
          self.buttondic1 = {}
          self.buttondic4 = {}
          self.entrydic1 = {}
          self.entrydic2 = {}
          self.sliderdic1 ={}

          for i in range (0,3):
            self.label1 = QLabel('Target IPv6 address', self)
            self.label5 = QLabel('Mb/s', self)
            self.entry1 = QLineEdit(self)

            self.entry2 = QLineEdit(self)
            self.entry2.setMaxLength(2)
            self.entry2.setText("1")

            self.slider1 = QSlider(self)
            self.slider1.setOrientation(Qt.Horizontal)
            self.slider1.setMinimum(1)
            self.slider1.setMaximum(10)
            self.slider1.setSingleStep(1)

            self.labeldic1.update({i:self.label1})
            self.labeldic5.update({i:self.label5})
            self.entrydic1.update({i:self.entry1})
            self.entrydic2.update({i:self.entry2})
            self.sliderdic1.update({i:self.slider1})

          rows = [1,3,5]
          x = 0
          for i in rows:
            self.gLayout.addWidget(self.labeldic1[x],i,0)
            self.gLayout.addWidget(self.labeldic5[x],i+1,3)
            self.gLayout.addWidget(self.entrydic1[x],i,1,1,4)
            self.gLayout.addWidget(self.entrydic2[x],i+1,4)
            self.gLayout.addWidget(self.sliderdic1[x],i+1,1,1,2)
            x += 1

          for i in range(0,3):
            self.sliderdic1[i].valueChanged.connect(lambdai=i:self.slidechanged(i))
            self.entrydic2[i].textChanged.connect(self.textchanged)

        def slidechanged(self, value):
          svalue = str(self.slider1.value()) #This is supposed to be str(self.sliderdic1[x].value())
          self.entry2.setText(svalue) #this is supposed to be self.entrydic2[x].setText(svalue)

        def textchanged(self, value):
          try:
            if int(value) > 0:
                lvalue = int(self.entry2.text()) #This is supposed to be int(self.entrydict2[x].text())
                self.slider1.setValue(lvalue) #This is supposed to be self.sliderdic1[x].setValue(lvalue)
          except:
                self.entry2.setText('1') #This is supposed to be self.entrydic2[x].setText('1')

我应该能够以某种方式将 self.entry2.setText(svalue) 识别为 self.entrydic2[x].setText(svalue),但我不知道如何将值传递给函数

提前感谢您提供的任何帮助

您的代码已经相差无几:您只需要进行一些小的改进。

信号连接的问题是信号发送的值覆盖了默认索引参数。所以你只需要在你的 lambdas/slots 中插入一个额外的参数,就像这样:

    for i in range(0,3):
        self.sliderdic1[i].valueChanged.connect(
            lambda value, i=i: self.slidechanged(value, i))
        self.entrydic2[i].textChanged.connect(
            lambda text, i=i: self.textchanged(text, i))

def slidechanged(self, value, index):
    self.entrydic2[index].setText(str(value))

def textchanged(self, value, index):
    try:
        if int(value) > 0:
            self.sliderdic1[index].setValue(int(value))
    except ValueError:
        self.entrydic2[index].setText('1')

(注意:永远不要使用 bare,除非:它几乎不可能进行调试!)