def delete_data(self): # 创建一个新窗口,并设置其属性 status_label = QLabel() new_window = QWidget(self) new_window.setWindowTitle("删除员工信息") new_window.setGeometry(200, 200, 500, 300) # 创建返回按钮并设置其属性 return_button = QPushButton("返回", new_window) return_button.clicked.connect(new_window.close) return_button.clicked.connect(self.window.show) # 设置输入框 self.input_box = QLineEdit(new_window) status_label.setText("输入需要删除的对象,格式为:部门/姓名/性别/职位/工号/状态,对象") # 获取输入框中的数据 data = self.input_box.text().split(",") if len(data) != 2 or not all(map(lambda x: x.strip(), data)): status_label.setText("输入格式错误!请按照 部门/姓名/性别/职位/工号/状态,对象 的格式输入。") return # 执行 SQL 删除语句 sql = "DELETE FROM Staff WHERE {} = (?)".format(data[0]) self.cursor.execute(sql, (data[1],)) try: self.cursor.execute(sql, data[0]) self.cnxn.commit() self.query("SELECT * FROM Staff") status_label.setText("数据删除成功!") except: status_label.setText("数据删除失败!") # 添加表格、按键到新窗口中 self.v_layout = QVBoxLayout(new_window) self.v_layout.addWidget(status_label) self.v_layout.addWidget(self.input_box) self.v_layout.addWidget(return_button) self.v_layout.addWidget(status_label) new_window.setLayout(self.v_layout) new_window.show()输出窗口什么都没有
时间: 2024-02-14 17:06:49 浏览: 67
根据您提供的代码,可以看出您没有将输入框和标签添加到布局中,导致无法在窗口中显示。建议您将以下两行代码:
```
self.v_layout.addWidget(status_label)
self.v_layout.addWidget(self.input_box)
```
添加到输入框设置和 SQL 语句执行之前,即在以下这段代码的前面:
```
data = self.input_box.text().split(",")
if len(data) != 2 or not all(map(lambda x: x.strip(), data)):
status_label.setText("输入格式错误!请按照 部门/姓名/性别/职位/工号/状态,对象 的格式输入。")
return
```
这样就可以将输入框和标签添加到窗口的布局中,从而在窗口中显示了。
相关问题
def delete_data(self): # 创建一个新窗口,并设置其属性 status_label = QLabel() new_window = QWidget(self) new_window.setWindowTitle("删除员工信息") new_window.setGeometry(200, 200, 500, 300) # 创建返回按钮并设置其属性 return_button = QPushButton("返回", new_window) return_button.clicked.connect(new_window.close) return_button.clicked.connect(self.window.show) # 设置输入框 self.input_box = QLineEdit(new_window) status_label.setText("输入需要删除的对象,格式为:部门/姓名/性别/职位/工号/状态,对象") # 设置删除按钮 delete_button = QPushButton("删除",new_window) delete_button.clicked.connect(self.delete) # 添加表格、按键到新窗口中 self.v_layout = QVBoxLayout(new_window) self.v_layout.addWidget(status_label) self.v_layout.addWidget(self.input_box) self.v_layout.addWidget(return_button) self.v_layout.addWidget(status_label) new_window.setLayout(self.v_layout) new_window.show() def delete(self): # 获取输入框中的数据 data = self.input_box.text().split(",") if len(data) != 2 or not all(map(lambda x: x.strip(), data)): self.status_label.setText("输入格式错误!请按照 部门/姓名/性别/职位/工号/状态,对象 的格式输入。") return # 执行 SQL 删除语句 sql = "DELETE FROM Staff WHERE {} = (?)".format(data[0]) self.cursor.execute(sql, (data[1],)) try: self.cursor.execute(sql, data[0]) self.cnxn.commit() self.query("SELECT * FROM Staff") self.status_label.setText("数据删除成功!") except: self.status_label.setText("数据删除失败!")查错
在 delete() 函数中,有如下两个问题需要修改:
1. 在执行 SQL 删除语句时,使用了 data[0] 作为字段名,但应该使用占位符 '?',然后将 data[1] 作为参数传入 execute() 函数中。
2. 在执行完 SQL 删除语句后,应该将结果进行提交(commit())。在这里,你已经执行了两次 execute() 函数,导致提交时出错。
修改后的 delete() 函数代码如下:
```
def delete(self):
# 获取输入框中的数据
data = self.input_box.text().split(",")
if len(data) != 2 or not all(map(lambda x: x.strip(), data)):
self.status_label.setText("输入格式错误!请按照 部门/姓名/性别/职位/工号/状态,对象 的格式输入。")
return
# 执行 SQL 删除语句
sql = "DELETE FROM Staff WHERE {} = ?".format(data[0])
try:
self.cursor.execute(sql, (data[1],))
self.cnxn.commit()
self.query("SELECT * FROM Staff")
self.status_label.setText("数据删除成功!")
except:
self.status_label.setText("数据删除失败!")
```
修改后再次运行程序,应该可以正常执行删除操作了。
def edit_data(self): # 创建一个新窗口,并设置其属性 new_window = QWidget() new_window.status_label1 = QLabel() new_window.status_label2 = QLabel() new_window.setWindowTitle("修改员工信息") new_window.setGeometry(200, 200, 400, 300) # 创建返回按钮并设置其属性 return_button = QPushButton("返回", new_window) return_button.clicked.connect(new_window.close) return_button.clicked.connect(self.window.show) # 设置输入框 self.input_box1 = QLineEdit(new_window) new_window.status_label1.setText("输入修改前的对象,格式为:部门/姓名/性别/职位/工号/状态,对象") self.input_box2 = QLineEdit(new_window) new_window.status_label2.setText("输入修改后的对象,格式为:部门/姓名/性别/职位/工号/状态,对象") # 设置修改按钮 edit_button = QPushButton("修改",new_window) edit_button.clicked.connect(lambda: self.edit(new_window)) # 添加表格、按键到新窗口中 self.v_layout = QVBoxLayout(new_window) self.v_layout.addWidget(new_window.status_label1) self.v_layout.addWidget(self.input_box1) self.v_layout.addWidget(new_window.status_label2) self.v_layout.addWidget(self.input_box2) self.v_layout.addWidget(edit_button) self.v_layout.addWidget(return_button) new_window.setLayout(self.v_layout) new_window.show() def edit(self,new_window): # 获取输入框中的数据 data1 = self.input_box1.text().split(",") if len(data1) != 2: new_window.status_label1.setText("输入格式错误!请按照 ID,Name,Age 的格式输入。") return data2 = self.input_box2.text().split(",") if len(data2) != 2: new_window.status_label1.setText("输入格式错误!请按照 ID,Name,Age 的格式输入。") return # 执行 SQL 修改语句 sql = "UPDATE Staff SET ? = ? WHERE ? = ?" try: self.cursor.execute(sql, data1[0], data1[1], data2[0], data2[1]) self.cnxn.commit() new_window.status_label1.setText("数据修改成功!") except: new_window.status_label1.setText("数据修改失败!")查错
这段代码是一个员工信息修改的功能,它创建了一个新窗口,并在新窗口中设置了两个输入框和一个修改按钮。当用户点击修改按钮时,程序会根据输入框中的数据执行 SQL 修改语句,将输入框1中的数据修改为输入框2中的数据。如果修改成功,程序会在新窗口的状态标签中显示“数据修改成功!”;如果修改失败,程序会在新窗口的状态标签中显示“数据修改失败!”。请注意,这段代码中的 SQL 语句可能存在安全隐患,因为它直接将用户输入的数据拼接到 SQL 语句中,容易受到 SQL 注入攻击。建议使用参数化查询来避免这种问题。
阅读全文