如何在PyQt5中单击按钮时从表格中删除复选框?

你懂

我正在创建一个房间预订程序,为此程序我使用一个表格,以便用户可以选中一个复选框并单击“预定”,然后我的程序会将详细信息添加到数据库中。但是,为了确保不会发生超额预订一个房间+时间段的情况,我想表明某种迹象表明房间+时间段已被占用-因此我认为一旦将其添加到复选框中,我便可以取消选中该复选框数据库。有没有办法做到这一点,还是我应该创建一个错误窗口,因为房间和时间的组合已经存在于数据库中,该窗口才会弹出?

有人对我如何表明房间和时隙已经被预订有其他建议吗?

主视窗

class Ui_ViewAllRooms(QtWidgets.QMainWindow, Ui_ViewAllRooms):
    def __init__(self, username, parent=None):
        super(Ui_ViewAllRooms, self).__init__(parent)
        self.username = username
        self.setupUi(self)
        self.dialogBook = Ui_DialogBook()
        self.book_Button.clicked.connect(self.book_clicked)

    @QtCore.pyqtSlot()
    def book_clicked(self):
        self._checked_items = []
        for i in range(self.tableWidget.rowCount()):
            for j in range(self.tableWidget.columnCount()):
                item = self.tableWidget.item(i, j)
                if item.checkState() == QtCore.Qt.Checked:
                    self.v = self.tableWidget.horizontalHeaderItem(j).text()
                    self.h = self.tableWidget.verticalHeaderItem(i).text()
                    self._checked_items.append([self.h, self.v, self.tableWidget.item(i, j).text()])

        self.dialogBook.listWidget.clear()
        self.dialogBook.listWidget.addItems([ "{} {} {}".format(self.h, self.v, it) for self.h, self.v, it in self._checked_items])
        self.dialogBook.show()
        self.dialogBook.yes_button.clicked.connect(self.addBooking)

    def addBooking(self):
        now = QDate.currentDate()
        now1 = now.toString(Qt.DefaultLocaleLongDate)
        room,lesson,irr = zip(*self._checked_items)
        connection = sqlite3.connect("roombooking.db")
        c = connection.cursor()

        lastBookingId = []
        for item in lesson:
            c.execute("INSERT INTO Booking (lessonBooked, dateBooked, username) VALUES (?,?,?)",(item,now1,self.username))
            connection.commit()
            lastBookingId.append (c.lastrowid)

        for i in range (len (lastBookingId)):
            roomb = room[i]
            lastBookingId1 = lastBookingId[i]
            c.execute ("INSERT INTO BookedRoom (roomNO, bookingID) VALUES (?, ?)",(roomb,lastBookingId1))
            connection.commit()
##### I would like the checkboxes selected to be removed somewhere here #####
        self.dialogBook.hide()

Ui_ViewAllRooms

class Ui_ViewAllRooms(object):
    def setupUi(self, ViewAllRooms):

        ViewAllRooms.setObjectName("ViewAllRooms")
        ViewAllRooms.resize(671, 347)

        self.centralwidget = QtWidgets.QWidget(ViewAllRooms)
        self.centralwidget.setObjectName("centralwidget")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(10, 100, 651, 181))

        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(6)
        self.tableWidget.setRowCount(5)
        self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

        self.tableWidget.setHorizontalHeaderLabels("P1 P2 P3 P4 P5 P6".split())
        self.tableWidget.setVerticalHeaderLabels("C101 C214 C320 F04 E201".split())

        for i in range(self.tableWidget.rowCount()):
            for j in range(self.tableWidget.columnCount()):
                item = QtWidgets.QTableWidgetItem()
                item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
                item.setCheckState(QtCore.Qt.Unchecked)
                self.tableWidget.setItem(i, j, item)
                self._checked_items = []

        self.book_Button = QtWidgets.QPushButton(self.centralwidget)
        self.book_Button.setGeometry(QtCore.QRect(300, 290, 75, 23))
        self.book_Button.setObjectName("book_Button")

        ViewAllRooms.setCentralWidget(self.centralwidget)
        self.retranslateUi(ViewAllRooms)
        QtCore.QMetaObject.connectSlotsByName(ViewAllRooms)

    def retranslateUi(self, ViewAllRooms):
        _translate = QtCore.QCoreApplication.translate
        ViewAllRooms.setWindowTitle(_translate("ViewAllRooms", "MainWindow"))
        item = self.tableWidget.verticalHeaderItem(0)
        item.setText(_translate("ViewAllRooms", "C101"))
        item = self.tableWidget.verticalHeaderItem(1)
        item.setText(_translate("ViewAllRooms", "C214"))
        item = self.tableWidget.verticalHeaderItem(2)
        item.setText(_translate("ViewAllRooms", "C320"))
        item = self.tableWidget.verticalHeaderItem(3)
        item.setText(_translate("ViewAllRooms", "F04"))
        item = self.tableWidget.verticalHeaderItem(4)
        item.setText(_translate("ViewAllRooms", "E201"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("ViewAllRooms", "P1"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("ViewAllRooms", "P2"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("ViewAllRooms", "P3"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("ViewAllRooms", "P4"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("ViewAllRooms", "P5"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("ViewAllRooms", "P6"))
        __sortingEnabled = self.tableWidget.isSortingEnabled()
        self.tableWidget.setSortingEnabled(False)
        self.tableWidget.setSortingEnabled(__sortingEnabled)
        self.book_Button.setText(_translate("ViewAllRooms", "Book"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ViewAllRooms = QtWidgets.QMainWindow()
    ui = Ui_ViewAllRooms()
    ui.setupUi(ViewAllRooms)
    ViewAllRooms.show()

    sys.exit(app.exec_())
永乐

您只需要获取商品的位置并用于takeItem()删除即可:

for i in range(self.tableWidget.rowCount()):
    for j in range(self.tableWidget.columnCount()):
        item = self.tableWidget.item(i, j)
        if item.checkState() == QtCore.Qt.Checked:
            it = self.tableWidget.takeItem(i, j)
            del it

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在reactJs中单击删除按钮时如何删除多个选定的复选框

如何在活动中单击按钮时在 RecyclerView 中显示复选框?

如何在angularjs中单击按钮时显示复选框列表?

如何在MVC中单击按钮时选中复选框?

PyQt5 未选中复选框时,我可以从状态栏中删除进度吗?

如何在复选框单击时将列表项的值存储在数组中并在取消单击时删除

如何仅在pyqt5中的选定复选框中运行代码?

如何检查PyQt5中选中了哪些复选框

单击dojo中的按钮时启用复选框

如何在 Angular8 中单击复选框时从本地存储中添加和删除值

PyQt5:区分单击和双击的复选框?

单击复选框时从 jquery 中删除 Div

PyQt5:使用按钮动态添加复选框

如何删除复选框中的表的行单击?

单击ios中的保存按钮时如何保存复选框值

如何仅在用户单击 Blazor 中的复选框时启用按钮

如何在 React js 中单击复选框启用/禁用按钮?

如何在表格中显示选定复选框的数量

如何在pyQt中列出已选中的复选框

如何使用jQuery在单击时从标签复选框中删除类

在PHP中单击复选框时,如何禁用输入?

如何在 Vuejs 中单击标签时重置/清除复选框?

如何修复表格中的“复选框”

如何在按钮中创建复选框?(javafx)

选择复选框并单击删除按钮后,如何自动将列中的数据更改为“ N”而不是删除

在pyqt5中单击新按钮时如何取消选定按钮(QPushButton)的动作?

如何在复选框中添加/删除选中的属性?

如何在 tkinter 中动态删除复选框?

如何在foreach中创建复选框时将复选框放置在DIV上