【问题标题】:How to update the item of a ComboBox如何更新组合框的项目
【发布时间】:2020-04-21 01:12:56
【问题描述】:

我已经编写了一个按钮,当单击 '+' 时,从表中生成的新行应该使用之前的组合框选择进行更新,(giff 更好地说明了目标)。

根据文档,我了解它是使用 setCurrentIndex 方法完成的,我应用了它,但我仍然无法得到任何东西,请任何可以帮助我的专家?谢谢。

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication, QComboBox, QTableWidgetItem
from PyQt5.uic import loadUi
from PyQt5.QtCore import Qt

class subwindowDatosEntrada_Dinamic(QMainWindow):

    def __init__(self, parent=None):
        super(subwindowDatosEntrada_Dinamic,self).__init__(parent)
        loadUi('Gui/subventanaDatosEntrada_Dinamic.ui', self)
        self.parent = parent

        self.parent.ventanas[0] = 1
        self.parent.ventanas[1] = 1
        self.iniciar()         

        # Botones
        self.btn_mas.clicked.connect(self.mas)
        self.btn_menos.clicked.connect(self.menos)

    def iniciar(self):
        if len(self.parent.datos_generales[0]) > 0:
            for i in range(len(self.parent.datos_generales[0])):
                self.mas()
                self.table_datosEntrada.cellWidget(i, 1).setCurrentText(self.parent.datos_generales[0][i][1])
                self.table_datosEntrada.setItem(i, 2, QTableWidgetItem(str(self.parent.datos_generales[0][i][2])))
                self.table_datosEntrada.setItem(i, 3, QTableWidgetItem(str(self.parent.datos_generales[0][i][3])))
                self.table_datosEntrada.setItem(i, 4, QTableWidgetItem(str(self.parent.datos_generales[0][i][4])))


    def mas(self): 
        nuevo = self.table_datosEntrada.rowCount() #--> Este método me cuenta filas para luego agregarlas.    
        self.table_datosEntrada.insertRow(nuevo)

        for row in range(self.table_datosEntrada.rowCount() - 1, self.table_datosEntrada.rowCount(), 1):
            for rowe in range(self.table_datosEntrada.columnCount()):

                c1 = QtWidgets.QComboBox()
                c1.addItems(['Columna', 'Viga'])
                c1.setEditable(True) # Pasos para centrarComboBox
                c1.lineEdit().setReadOnly(True)
                c1.lineEdit().setAlignment(Qt.AlignCenter)
                for i in range(c1.count()):
                    c1.setItemData(i, Qt.AlignCenter, Qt.TextAlignmentRole)

                self.table_datosEntrada.setCellWidget(nuevo, rowe, c1)       

                if nuevo != 0:
                    last_index = self.table_datosEntrada.cellWidget(nuevo - 1, rowe).currentIndex()
                    c1.setCurrentIndex(last_index)

                rowe += 1
                item = QTableWidgetItem()
                item.setTextAlignment(Qt.AlignCenter)
                if nuevo != 0:
                    value = self.table_datosEntrada.item(nuevo-1, rowe).text()

                else:
                    value = 0
                item.setData(Qt.EditRole, value)
                self.table_datosEntrada.setItem(nuevo, rowe, item)

对不起,我的英语不是我的母语

【问题讨论】:

  • 如果要将新项目设置为默认索引,只需将每个新组合框的 currentIndexChanged 连接到存储“新”默认索引的函数,然后始终将该索引与 @987654325 一起使用@ 在新的组合框上。在完全不同的问题上,我知道英语不是您的母语,但请避免在其他语言中使用变量名和 cmets:它们只会使您的示例更难阅读,这意味着我们将更难理解你的代码,然后帮助你。
  • 谢谢,我会考虑建议的,但是请您用代码说明您给我的解释,以了解您想告诉我的内容,即从我发送给您的代码中,你会改变什么? @musicamante

标签: python user-interface pyqt5


【解决方案1】:

只需跟踪 any 组合框的 最新 更改索引,并将其用作您创建的任何新 QComboBox 的当前索引:

class subwindowDatosEntrada_Dinamic(QMainWindow):
    def __init__(self, parent=None):
        # ...
        self.defaultComboIndex = 0

    def setDefaultComboIndex(self, index):
        self.defaultComboIndex = index

    def mas(self): 
        # ...
                c1 = QtWidgets.QComboBox()
                c1.addItems(['Columna', 'Viga'])
                c1.setCurrentIndex(self.defaultComboIndex)
                c1.currentIndexChanged.connect(self.setDefaultComboIndex)
                # ...

几个非常重要的建议:

  1. 总是更喜欢大写的类名称(仔细阅读Style Guide for Python Code,又名PEP 8 上的建议)。
  2. 显然,您可以在程序中使用任何名称样式约定;但是当您共享代码并寻求帮助时,坚持代码样式约定并始终使用英语(对于类、变量、常量、函数、等):阅读您的代码的人可能使用其他本机语言,这意味着您使用的名称对他们来说毫无意义;他们与毫无意义的名字作斗争可能会导致他们放弃尝试帮助您,让您无法回答您的疑问。

【讨论】:

  • 好的,下次我会考虑你的建议,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2011-11-17
  • 2010-11-29
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多