首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >禁用QTableWidget中的多个按钮

禁用QTableWidget中的多个按钮
EN

Stack Overflow用户
提问于 2020-11-30 22:32:24
回答 2查看 150关注 0票数 0

在我的应用程序中,我们可以将项目添加到QTableWidget中,然后将更新按钮和删除按钮添加到QTableWidget中,更新和删除功能表示网络操作,因此我在这里使用链接到进度条的QTimer进行了模拟。因此,我希望在单击、删除更新按钮时禁用所有按钮,但单击的按钮除外,并在任务完成时重新启用所有按钮。

代码语言:javascript
运行
复制
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的链接

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-30 22:57:38

手头的任务是:

我想在单击“删除”或“更新”按钮时禁用所有按钮,但单击的按钮除外

一种解决办法可以是:

  1. 保存所有按钮的列表
  2. 编写一个方法,禁用除指定按钮之外的所有按钮(在参数中)。您可以遍历所有按钮并将其与指定的按钮进行比较以确定禁用或启用。
  3. 对于每个按钮,编写一个小lambda,以按钮作为参数调用(2)中的方法。将此lambda连接到按钮的按下事件

或者,您也可以使用QSignalMapper。然后将映射的信号连接到(2)中的方法。

票数 0
EN

Stack Overflow用户

发布于 2021-06-15 02:09:10

如果您只想将所有特定元素(如lineEdits )收集到一个可迭代集合中,例如列表,那么这里有一个一次性函数,它允许您向该函数传递各种指令,以影响其所有字段。

我希望这个例行公事对某人有帮助。~迈克

代码语言:javascript
运行
复制
        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")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65082123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档