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("数据修改失败!")查错
时间: 2024-02-29 15:56:09 浏览: 18
这段代码是一个员工信息修改的功能,它创建了一个新窗口,并在新窗口中设置了两个输入框和一个修改按钮。当用户点击修改按钮时,程序会根据输入框中的数据执行 SQL 修改语句,将输入框1中的数据修改为输入框2中的数据。如果修改成功,程序会在新窗口的状态标签中显示“数据修改成功!”;如果修改失败,程序会在新窗口的状态标签中显示“数据修改失败!”。请注意,这段代码中的 SQL 语句可能存在安全隐患,因为它直接将用户输入的数据拼接到 SQL 语句中,容易受到 SQL 注入攻击。建议使用参数化查询来避免这种问题。
相关问题
def show_query1_result(self): # 查询数据 db = pymysql.connect(host='39.99.214.172', user='root', password='Solotion.123', db='jj_tset') cursor = db.cursor() db_sql = """ """ cursor.execute(db_sql) result = cursor.fetchall() db.close() # 清空表格 self.query1_window.table_widget.setRowCount(0) self.query1_window.table_widget.setColumnCount(len(result[0])) # 添加数据到表格 for row_num, row_data in enumerate(result): self.query1_window.table_widget.insertRow(row_num) for col_num, col_data in enumerate(row_data): self.query1_window.table_widget.setItem(row_num, col_num, QTableWidgetItem(str(col_data))) # 显示窗口 self.query1_window.show()数据展示页面怎么设置筛选器按ID筛选结果并展示
你可以添加一个筛选器控件,例如QComboBox,让用户选择要按哪个字段进行筛选。然后在查询按钮的槽函数中,根据用户选择的字段构建SQL语句,再执行查询操作,并将结果展示在表格中。
以下是示例代码:
```python
from PyQt5.QtWidgets import QComboBox
class Query1Window(QWidget):
def __init__(self):
super().__init__()
self.table_widget = QTableWidget(self)
self.filter_combo = QComboBox(self)
self.filter_combo.addItems(['ID', 'Name', 'Age']) # 添加筛选器选项
self.query_btn = QPushButton('Query', self)
self.query_btn.clicked.connect(self.show_result)
def show_result(self):
# 获取用户选择的筛选字段和筛选值
filter_field = self.filter_combo.currentText()
filter_value = self.filter_line_edit.text()
# 构建SQL语句
db_sql = f"SELECT * FROM jj_tset WHERE {filter_field}='{filter_value}'"
# 执行查询操作
db = pymysql.connect(host='39.99.214.172', user='root', password='Solotion.123', db='jj_tset')
cursor = db.cursor()
cursor.execute(db_sql)
result = cursor.fetchall()
db.close()
# 清空表格
self.table_widget.setRowCount(0)
self.table_widget.setColumnCount(len(result[0]))
# 添加数据到表格
for row_num, row_data in enumerate(result):
self.table_widget.insertRow(row_num)
for col_num, col_data in enumerate(row_data):
self.table_widget.setItem(row_num, col_num, QTableWidgetItem(str(col_data)))
# 显示窗口
self.show()
```
需要注意的是,上述代码并没有添加筛选值的输入控件,你可以根据需要自行添加。另外,由于SQL注入等安全问题,建议使用参数化查询来构建SQL语句。
class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Qt Window with SQLite") # 創建佈局和主窗口部件 layout = QVBoxLayout() central_widget = QWidget(self) central_widget.setLayout(layout) self.setCentralWidget(central_widget) # 創建文本框和按鈕 self.text_edit = QLineEdit() layout.addWidget(self.text_edit) save_button = QPushButton("Save") save_button.clicked.connect(self.save_data) layout.addWidget(save_button) show_button = QPushButton("Show") show_button.clicked.connect(self.show_data) layout.addWidget(show_button)修改這個窗口,左邊放輸入框和按鈕,右邊展示文本框和列表框,用來顯示數據
要修改窗口布局,将左侧放置输入框和按钮,右侧放置文本框和列表框来显示数据,可以使用QGridLayout布局管理器。以下是修改后的代码示例:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, QLineEdit, QTextEdit, QListView
from PyQt5.QtCore import QStringListModel
import sqlite3
# 创建数据库连接
conn = sqlite3.connect("data.db")
cursor = conn.cursor()
# 创建数据表
cursor.execute("""CREATE TABLE IF NOT EXISTS data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
value TEXT
)""")
conn.commit()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Qt Window with SQLite")
# 创建主窗口部件
main_widget = QWidget(self)
self.setCentralWidget(main_widget)
# 创建布局
main_layout = QHBoxLayout()
main_widget.setLayout(main_layout)
# 创建左侧布局
left_layout = QVBoxLayout()
left_widget = QWidget()
left_widget.setLayout(left_layout)
# 创建输入框和按钮
self.text_edit = QLineEdit()
left_layout.addWidget(self.text_edit)
save_button = QPushButton("Save")
save_button.clicked.connect(self.save_data)
left_layout.addWidget(save_button)
# 创建右侧布局
right_layout = QVBoxLayout()
right_widget = QWidget()
right_widget.setLayout(right_layout)
# 创建文本框和列表框
self.text_area = QTextEdit()
right_layout.addWidget(self.text_area)
self.list_view = QListView()
right_layout.addWidget(self.list_view)
# 添加左侧和右侧布局到主布局
main_layout.addWidget(left_widget)
main_layout.addWidget(right_widget)
def save_data(self):
value = self.text_edit.text()
# 将数据插入数据库
cursor.execute("INSERT INTO data (value) VALUES (?)", (value,))
conn.commit()
self.text_edit.clear()
def show_data(self):
# 从数据库中获取数据
cursor.execute("SELECT value FROM data")
result = cursor.fetchall()
# 在窗口中显示数据
text = ""
for value in result:
text += value[0] + "\n"
self.text_area.setPlainText(text)
# 使用QStringListModel将数据显示在列表框中
model = QStringListModel()
model.setStringList([value[0] for value in result])
self.list_view.setModel(model)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在上面的代码中,我们使用了QHBoxLayout和QVBoxLayout来创建主布局和左右两侧的布局。左侧布局放置输入框和按钮,右侧布局放置文本框和列表框。
在`save_data`函数中,我们将文本框中的数据插入数据库,并清空输入框。在`show_data`函数中,我们从数据库中获取数据,并在文本框中显示出来。同时,使用QStringListModel将数据显示在列表框中。
希望这次的修改能满足你的需求!