def query_data(self, new_window): # 获取输入框中的数据 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 = "select * from Staff where {} = (?)".format(data[0]) self.cursor.execute(sql, (data[1],)) # 获取查询结果并显示在表格中 rows = self.cursor.fetchall() self.table = QTableWidget() if rows: self.table.setRowCount(len(rows)) self.table.setColumnCount(len(rows[0])) for i, row in enumerate(rows): for j, col in enumerate(row): item = QTableWidgetItem(str(col)) self.table.setItem(i, j, item) self.table.setHorizontalHeaderLabels(["部门", "姓名", "性别", '职位', '工号', '状态']) self.table.horizontalHeader().setVisible(True) # 添加表格到新窗口中 self.v_layout = QVBoxLayout(new_window) self.v_layout.addWidget(self.table) new_window.setLayout(self.v_layout) new_window.show()如何解决这个问题
时间: 2024-01-28 21:02:52 浏览: 76
python 中-self-标识符和self标识符.docx
看起来你没有明确地声明self.table属性。这可能是导致问题的原因。你可以在类的__init__函数中声明self.table,如下所示:
```
def __init__(self):
super().__init__()
self.table = None
```
然后在query_data函数中,你可以检查self.table是否已经存在。如果它已经存在,你可以从父布局中删除它,然后重新设置它的内容。这里是修改后的代码:
```
def query_data(self, new_window):
# 获取输入框中的数据
data = self.input_box.text().split(",")
if len(data) != 2 or not all(map(lambda x: x.strip(), data)):
self.status_label.setText("输入格式错误!请按照 部门/姓名/性别/职位/工号/状态,对象 格式输入。")
return
# 检查 self.table 是否已经存在
if self.table:
self.v_layout.removeWidget(self.table)
self.table = None
# 执行 SQL 查询语句
sql = "select * from Staff where {} = (?)".format(data[0])
self.cursor.execute(sql, (data[1],))
# 获取查询结果并显示在表格中
rows = self.cursor.fetchall()
self.table = QTableWidget()
if rows:
self.table.setRowCount(len(rows))
self.table.setColumnCount(len(rows[0]))
for i, row in enumerate(rows):
for j, col in enumerate(row):
item = QTableWidgetItem(str(col))
self.table.setItem(i, j, item)
self.table.setHorizontalHeaderLabels(["部门", "姓名", "性别", '职位', '工号', '状态'])
self.table.horizontalHeader().setVisible(True)
# 添加表格到新窗口中
self.v_layout.addWidget(self.table)
new_window.setLayout(self.v_layout)
new_window.show()
```
这样,当你多次调用query_data函数时,就不会出现上述问题了。
阅读全文