如何解决如何获取选中的行 QtableWidget
我有这个代码。我想删除点击删除按钮时勾选处于活动状态的任何行
from main import Ui_MainWindow
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
def set_cell_elements(rows,l):
ui.tableWidget.setRowCount(len(rows))
ui.tableWidget.setVerticalHeaderLabels(rows)
ui.tableWidget.verticalHeader().setDefaultAlignment(Qt.AlignVCenter)
ui.tableWidget.horizontalHeader().setDefaultAlignment(Qt.AlignCenter)
for r in range(0,len(l)):
for i in range (0,len(l[r])) :
text = l[r][i]
ui.tableWidget.setItem(r,i,QtWidgets.QTableWidgetItem(str(text)))
ui.tableWidget.item(r,i).setTextAlignment(Qt.AlignCenter)
item = ui.tableWidget.item(r,0)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setCheckState(Qt.Unchecked)
item.checkState()
table_ = ui.tableWidget.horizontalHeader()
table_.setSectionResizeMode(i,QtWidgets.QHeaderView.ResizetoContents)
def delete_button():
pass
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
#=====================
rows = ['a','b','c','d','e','f']
l = [['Wade','Wade','Seth','Ivan','Riley'],['Gilbert','Jorge','Dan','Brian','Roberto'],['Ramon','Liam','Miles','Nathaniel','Lewis'],['Ethan','Milton','Joshua','Claude','Glen'],['Harvey','Blake','Antonio','Connor','Julian'],['Aidan','Harold','Conner','Peter','Hunter']]
set_cell_elements(rows,l)
ui.delete_button.clicked.connect(delete_button)
MainWindow.show()
sys.exit(app.exec_())
我没有办法获取勾选处于活动状态的行,你能帮我吗!?请
解决方法
欢迎使用 StackOverflow!您的问题中缺少一些信息,可以帮助您解决问题。我只能猜测你的代码缺失的部分。
我猜您已经使用 Qt Designer 以图形方式创建了您的 UI。我会假设你的 UI 看起来像这样:
编译后给出:
main.py
># -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Ui_MainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore,QtGui,QtWidgets
class Ui_MainWindow(object):
def setupUi(self,MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800,600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(19,16,761,521))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
self.verticalLayout.setContentsMargins(0,0)
self.verticalLayout.setObjectName("verticalLayout")
self.delete_button = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.delete_button.setObjectName("delete_button")
self.verticalLayout.addWidget(self.delete_button)
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.tableWidget = QtWidgets.QTableWidget(self.verticalLayoutWidget)
self.tableWidget.setBaseSize(QtCore.QSize(0,0))
self.tableWidget.setRowCount(6)
self.tableWidget.setColumnCount(5)
self.tableWidget.setObjectName("tableWidget")
self.verticalLayout_2.addWidget(self.tableWidget)
self.verticalLayout.addLayout(self.verticalLayout_2)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0,800,24))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))
self.delete_button.setText(_translate("MainWindow","Delete selected rows"))
最小更改解决方案是:
解决方案1.py
>from main import Ui_MainWindow
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
def set_cell_elements(rows,l):
ui.tableWidget.setRowCount(len(rows))
ui.tableWidget.setVerticalHeaderLabels(rows)
ui.tableWidget.verticalHeader().setDefaultAlignment(Qt.AlignVCenter)
ui.tableWidget.horizontalHeader().setDefaultAlignment(Qt.AlignCenter)
for r in range(0,len(l)):
for i in range (0,len(l[r])) :
text = l[r][i]
ui.tableWidget.setItem(r,i,QtWidgets.QTableWidgetItem(str(text)))
ui.tableWidget.item(r,i).setTextAlignment(Qt.AlignCenter)
item = ui.tableWidget.item(r,0)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setCheckState(Qt.Unchecked)
item.checkState()
table_ = ui.tableWidget.horizontalHeader()
table_.setSectionResizeMode(i,QtWidgets.QHeaderView.ResizeToContents)
def delete_button():
for r in range(ui.tableWidget.rowCount(),-1):
item = ui.tableWidget.item(r - 1,0)
if item.checkState() == Qt.Checked:
ui.tableWidget.removeRow(r - 1)
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
#=====================
rows = ['a','b','c','d','e','f']
l = [['Wade','Wade','Seth','Ivan','Riley'],['Gilbert','Jorge','Dan','Brian','Roberto'],['Ramon','Liam','Miles','Nathaniel','Lewis'],['Ethan','Milton','Joshua','Claude','Glen'],['Harvey','Blake','Antonio','Connor','Julian'],['Aidan','Harold','Conner','Peter','Hunter']]
set_cell_elements(rows,l)
ui.delete_button.clicked.connect(delete_button)
MainWindow.show()
sys.exit(app.exec_())
但是可以对您的代码进行更多清理和简化:
解决方案2.py
>from main import Ui_MainWindow
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
def set_cell_elements(row_headers,data_body):
ui.tableWidget.setRowCount(len(row_headers))
ui.tableWidget.setVerticalHeaderLabels(row_headers)
ui.tableWidget.verticalHeader().setDefaultAlignment(Qt.AlignVCenter)
ui.tableWidget.horizontalHeader().setDefaultAlignment(Qt.AlignCenter)
for (row_number,current_row) in enumerate(data_body):
for (column_number,current_text) in enumerate(current_row):
ui.tableWidget.setItem(
row_number,column_number,QtWidgets.QTableWidgetItem(str(current_text))
)
ui.tableWidget.item(row_number,column_number).setTextAlignment(Qt.AlignCenter)
row_header = ui.tableWidget.horizontalHeader()
row_header.setSectionResizeMode(column_number,QtWidgets.QHeaderView.ResizeToContents)
item = ui.tableWidget.item(row_number,0)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setCheckState(Qt.Unchecked)
def delete_button_action():
for current_row in range(ui.tableWidget.rowCount() - 1,-1,-1):
first_item = ui.tableWidget.item(current_row,0)
state_current_row = first_item.checkState()
if state_current_row == Qt.Checked:
ui.tableWidget.removeRow(current_row)
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
row_headers = ('a','f')
data_body = (
('Wade','Riley'),('Gilbert','Roberto'),('Ethan','Glen'),('Ramon','Lewis'),('Harvey','Julian'),('Aidan','Hunter')
)
set_cell_elements(row_headers,data_body)
ui.delete_button.clicked.connect(delete_button_action)
MainWindow.show()
sys.exit(app.exec_())
但是您可以以更加面向对象的方式对其进行编码。这样,只要您提供包含的小部件及其初始数据,您就可以将其插入 UI 的任何位置,并且它会自行处理:
解决方案 3.py
>import sys
from main import Ui_MainWindow
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
class Simple_table_editor(Ui_MainWindow):
def __init__(self,parent,row_headers,initial_data):
super().__init__()
self.setupUi(parent)
self.tableWidget.setRowCount(len(row_headers))
self.tableWidget.setVerticalHeaderLabels(row_headers)
self.tableWidget.verticalHeader().setDefaultAlignment(Qt.AlignVCenter)
self.tableWidget.horizontalHeader().setDefaultAlignment(Qt.AlignCenter)
for (row_number,current_row) in enumerate(initial_data):
for (column_number,current_text) in enumerate(current_row):
self.tableWidget.setItem(
row_number,QtWidgets.QTableWidgetItem(str(current_text))
)
self.tableWidget.item(row_number,column_number).setTextAlignment(Qt.AlignCenter)
row_header = self.tableWidget.horizontalHeader()
row_header.setSectionResizeMode(column_number,QtWidgets.QHeaderView.ResizeToContents)
item = self.tableWidget.item(row_number,0)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setCheckState(Qt.Unchecked)
self.delete_button.clicked.connect(self.delete_button_action)
def delete_button_action(self):
for current_row in range(self.tableWidget.rowCount() - 1,-1):
first_item = self.tableWidget.item(current_row,0)
state_current_row = first_item.checkState()
if state_current_row == Qt.Checked:
self.tableWidget.removeRow(current_row)
row_headers = ('a','Hunter')
)
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
table_editor = Simple_table_editor(MainWindow,data_body)
MainWindow.show()
sys.exit(app.exec_())
如果我的猜测是错误的,而您打算做其他事情,请提供更多详细信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。