在我的应用程序中,我们可以将项目添加到QTableWidget中,然后将更新按钮和删除按钮添加到QTableWidget中,更新和删除功能表示网络操作,因此我在这里使用链接到进度条的QTimer进行了模拟。因此,我希望在单击、删除或更新按钮时禁用所有按钮,但单击的按钮除外,并在任务完成时重新启用所有按钮。
class LoginNew(QMainWindow, ui):
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self)
self.show_database()
self.pushButton.clicked.connect(self.addToTableWidget)
def addToTableWidget(self):
self.row_data = []
self.val1 = self.lineEdit.text()
self.row_data.append(self.val1)
self.val2 = self.lineEdit_2.text()
self.row_data.append(self.val2)
self.val3 = self.lineEdit_3.text()
self.row_data.append(self.val3)
row = self.tableWidget.rowCount()
self.tableWidget.setRowCount(row+1)
col = 0
for item in self.row_data:
cell = QTableWidgetItem(str(item))
self.tableWidget.setItem(row, col, cell)
col += 1
db_new.insert(self.val1,self.val2, self.val3)
for index in range(self.tableWidget.rowCount()):
self.btx = QPushButton(self.tableWidget)
self.btn = QPushButton(self.tableWidget)
self.btx.setText("Update")
self.btn.setIcon(QIcon(QPixmap("delete.png")))
self.btn.setIconSize(QSize(35,45))
self.btx.clicked.connect(self.update_pos)
self.btn.clicked.connect(self.delete_pos)
self.tableWidget.setCellWidget(index,3, self.btx)
self.tableWidget.setCellWidget(index,4,self.btn)
def show_database(self):
res = db_new.fetch_data()
self.tableWidget.setRowCount(0)
for row_number, row_data in enumerate(res):
self.tableWidget.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.tableWidget.setItem(row_number, column_number+1 , QTableWidgetItem(str(data)))
for index in range(self.tableWidget.rowCount()):
self.btx = QPushButton(self.tableWidget)
self.btn = QPushButton(self.tableWidget)
self.btx.setText("Update")
self.btn.setIcon(QIcon(QPixmap("delete.png")))
self.btn.setIconSize(QSize(35,35))
self.btx.clicked.connect(self.update_pos)
self.btn.clicked.connect(self.delete_pos)
self.tableWidget.setCellWidget(index,4, self.btx)
self.tableWidget.setCellWidget(index,0,self.btn)
def update_pos(self):
self.button =self.focusWidget()
self.index = self.tableWidget.indexAt(self.button.pos())
self.button.clicked.connect(self.btn_trigger)
def btn_trigger(self):
QMessageBox.information(self, "Update Data", f' Value is {self.index.row()} {self.index.column()}')
self.geti=10
self.timer = QTimer()
self.timer.timeout.connect(self.num)
self.timer.start(2000)
self.show_database()
def cell_was_clicked(self, row,column, kale):
print("Row %d and Column %d was clicked" % (row, column))
item = self.tableWidget.itemAt(row, column)
self.ID = item.text()
QMessageBox.information(self, "INFORMATION",f'ID VALUE is {item.text()}')
def delete_pos(self):
print("delete Button was clicked")
self.geti=0
self.timer = QTimer()
self.timer.timeout.connect(self.num)
self.timer.start(1000)
def num(self):
if self.geti <9999:
print ( self.geti )
self.geti += 1
self.progressBar.setValue(self.geti)
else:
self.timer.stop()
def main():
app = QApplication(sys.argv)
win = LoginNew()
win.show()
app.exec_()
if __name__ =='__main__':
main()
我试过使用self.btx.setEnabled(False)
,但无法决定应该禁用哪些按钮?
UI映像实际Ui的链接
发布于 2020-11-30 22:57:38
手头的任务是:
我想在单击“删除”或“更新”按钮时禁用所有按钮,但单击的按钮除外
一种解决办法可以是:
或者,您也可以使用QSignalMapper。然后将映射的信号连接到(2)中的方法。
发布于 2021-06-15 02:09:10
如果您只想将所有特定元素(如lineEdits )收集到一个可迭代集合中,例如列表,那么这里有一个一次性函数,它允许您向该函数传递各种指令,以影响其所有字段。
我希望这个例行公事对某人有帮助。~迈克
def all_fields(switch=""):
field_list = [ self.lineEdit_1,
self.lineEdit_2,
self.lineEdit_3,
self.lineEdit_4,
self.lineEdit_5,
self.lineEdit_6,
self.lineEdit_7,
self.lineEdit_8,
self.lineEdit_9,
self.lineEdit_10,
self.textEdit ]
for field in field_list:
if str(switch).lower() == "clear":
field.clear()
elif str(switch).lower() == "disable":
field.setDisabled(True)
elif str(switch).lower() == "enable":
field.setDisabled(False)
all_fields("disable")
https://stackoverflow.com/questions/65082123
复制相似问题