- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个 QTableWidget,每当用户点击名为“添加案例”的按钮时,它应该在某些单元格上使用组合框动态添加行。我的主要部分已经工作,但我遇到的问题是尝试从组合框中获取文本。在下面的代码中,我有一个名为 defclearcases() 的函数作为用于测试的虚拟函数。我知道每当我添加一行时,前面的行引用都会被删除,这就是为什么我无法访问它们,所以我尝试创建一个列表来跟踪所有组合框对象。
我在当前代码中遇到此错误
错误:
Traceback (most recent call last):
File "C:\Users\Desktop\VLS.py", line 3888 in clearcases
print(TotalLift[0].currentText()
RuntimeError: wrapped C/C++ object of type QComboBox has been deleted
<小时/>
TotalLift = []
LiftBox = {}
TotalReed = []
ReedBox = {}
def addcases(self):
row = self.tableWidget.rowCount()
self.tableWidget.insertRow(row)
for x in range(1, 33):
self.tableWidget.setVerticalHeaderItem(row, QTableWidgetItem('Case ' + chr(ord('A') + row)))
for i in range(0, 4):
LiftBox[i] = QtWidgets.QComboBox()
Lift = ['', 'N', 'M', 'H']
LiftBox[i].addItems(Lift)
TotalLift.append(LiftBox[i])
ReedBox[i] = QtWidgets.QComboBox()
Reed = ['', 'B', 'C', 'D', 'E', 'O', 'P']
ReedBox[i].addItems(Reed)
self.tableWidget.setCellWidget(row, 2, ReedBox[0])
self.tableWidget.setCellWidget(row, 3, LiftBox[0])
self.tableWidget.setCellWidget(row, 4, ReedBox[1])
self.tableWidget.setCellWidget(row, 5, LiftBox[1])
self.tableWidget.setCellWidget(row, 6, ReedBox[2])
self.tableWidget.setCellWidget(row, 7, LiftBox[2])
self.tableWidget.setCellWidget(row, 8, ReedBox[3])
self.tableWidget.setCellWidget(row, 9, LiftBox[3])
def clearcases(self):
print(TotalLift[0].currentText())
我的总体问题是,每当添加行时如何从某些 QComboBox 获取文本?
仅供引用,clearcases 函数连接到 Clear Case 按钮,因此每当我单击该按钮时,我希望它将第一行(案例 A)Lift0 文本打印到控制台。
运行示例:
https://drive.google.com/drive/folders/0BzcHlfStubD3cHpUTkttN3h4NDA?usp=sharing
最佳答案
该问题主要是由以下语句引起的:
for x in range(1, 33):
前面的代码需要重复执行以下代码 LiftBox[i] = QtWidgets.QComboBox()
,因此变量将从内存中删除,从而获得您提到的错误消息.
另一个不好的编程习惯是在类中填充全局变量,最好将这些变量设为类属性。
最后,有一个正确的顺序最好不要修改 Qt Designer 生成的代码,明智的做法是创建一个处理逻辑的类并使用 Qt Designer 的设计,如下所示:
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.addcases)
self.pushButton_2.clicked.connect(self.clearcases)
self.TotalLift = []
self.LiftBox = {}
self.TotalReed = []
self.ReedBox = {}
def addcases(self):
row = self.tableWidget.rowCount()
self.tableWidget.insertRow(row)
self.tableWidget.setVerticalHeaderItem(row, QTableWidgetItem('Case ' + chr(ord('A') + row)))
Lift = ['', 'N', 'M', 'H']
Reed = ['', 'B', 'C', 'D', 'E', 'O', 'P']
for i in range(4):
self.LiftBox[i] = QtWidgets.QComboBox(self)
self.LiftBox[i].addItems(Lift)
self.TotalLift.append(self.LiftBox[i])
self.ReedBox[i] = QtWidgets.QComboBox(self)
self.ReedBox[i].addItems(Reed)
self.tableWidget.setCellWidget(row, 2*i +2, self.ReedBox[i])
self.tableWidget.setCellWidget(row, 2*i +3, self.LiftBox[i])
def clearcases(self):
print(self.TotalLift[0].currentText())
关于python - QTableWidget 动态行 w/QComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46079378/
有谁知道的返回值之间的关系 QTableWidget::item(x, y) 和 QTableWidget::cellWidget (x, y) 在同一个 QTableWidget 和同一个 row
当我将按钮拖放到 QTableWidget 中时,按钮会从旧位置消失,并且我放置按钮的单元格中不会显示任何内容。 有人可以提出问题是什么吗? 请在下面找到代码 import sys from PyQt
我有一个 QTableWidget,我想在其中填充另一个 QTableWidget 的字段。 这是它的样子: -------------------------- Name | Class | Sec
我问了一个与此非常相似的问题,但回答者提供了少量帮助,我无法解决我的问题。我想我会重新问这个问题,因为没有其他人回答我的问题。我想知道如何将 QTableWidget 的数据从一个窗口复制到另一个窗口
我的程序遇到了一个问题,我不知道如何解决。问题是我在两个类中有一个Qtablewidget,我使用信号和槽机制来传输一个QVector,它包含一个类的QTablewidgetItems,并将它放在其他
我有一个问题:调用 QTableWidget::update 不会导致 QTableWidget::paintEvent。 简要说明:- QTableWidgetEx - 派生自 QTableWidg
我正在使用 QTableWidget,当用户单击特定行时,我使用该索引来执行某些操作。我还使用 setSortEnable 启用了排序,所以当我通过单击标题对其进行排序时,所有行索引都会更改,但我想要
假设我有一个充满数据的二维数组,比如 10 x 10。内容以及行数可以随时更改。 现在我想在 QTableWidget 中显示这些数据。 我使用超时 1 秒的计时器来刷新表格内容。在超时槽中,如果我使
QTableWidget 有搜索用户数据行的方法吗? 类似的东西: //set user data row->setData(0, Qt::UserRole, "ID001"); //find row
我使用 UI 编辑器创建 QTableWidget。 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:
QTableWdiget对于简单的网格显示来说非常棒。更改颜色、字体等非常简单。 但是,我没有设法用更少的垂直空白来使网格看起来更“紧密”。我看到 Qt 文档讨论了(例如 here ) margin
可以为单元格设置占位符吗?我认为它可以通过为特定单元格设置 QLineEdit 来实现,但可能是 QTableWidget,或者 QTableWidgetItem 可以在没有自定义小部件的情况下做到这
当按下堆叠在左侧的按钮选择了 QTableWidget 中的整行时,是否有信号?我希望启用某些功能,但不确定如何启用? 提前致谢! 最佳答案 您有几个不同的选择。您所要求的最直接的方法是使用 QHea
在下面的代码中有两个样式表:problemStylesheet 和 okStylesheet。当我为 QTableWidget 使用 okStylesheet 时一切正常。标签在滚动。问题是如果我使用
QTableWidget由多个Selection Modi组成,可以通过方法进行选择 setSelectionMode (QAbstractItemView::SelectionMode mode)
我正在尝试使用最新的 Qt SDK (4.7.4) 来设置 QTableWidget 的样式。通过谷歌搜索,我发现我需要做这样的事情: QHeaderView::section { backg
我有一个 QTableWidget,我通过标题列使用它的默认排序功能,但我在 QTableWidget 中的一列是整数类型,并且通过 QTableWidget 默认排序它像字符串一样排序。所以有任何方
我有一个带有自定义小部件的 QTableWidget。这些小部件很大,几乎填满了整个滚动区域的高度,因此只有一行是可见的。 我可以用鼠标滚轮或拖动滚动条滚动,但行总是跳动。 有没有办法让QTableW
我尝试了 .setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) ,效果很好,但需要用户将鼠标移动到滚动条并使用它来体验平
我有一个带有自定义小部件的 QTableWidget。这些小部件很大,几乎填满了整个滚动区域的高度,因此只有一行是可见的。 我可以用鼠标滚轮或拖动滚动条滚动,但行总是跳动。 有没有办法让QTableW
我是一名优秀的程序员,十分优秀!