123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QTableWidget, QTableWidgetItem, \
- QHeaderView, QDialog, QLabel, QLineEdit, QCheckBox, QComboBox, QSizePolicy, QDialogButtonBox, QButtonGroup
- from DatabaseManager import DatabaseManager
- import config
- class AddInstructionDialog(QDialog):
- def __init__(self, instruction_data=None):
- super().__init__()
- self.setWindowTitle("指令")
- self.setFixedSize(400, 300)
- layout = QVBoxLayout()
- # 指令名称行
- self.name_layout = QHBoxLayout()
- self.name_label = QLabel("指令名称:")
- self.name_edit = QLineEdit()
- self.name_layout.addWidget(self.name_label)
- self.name_layout.addWidget(self.name_edit)
- layout.addLayout(self.name_layout)
- # 指令类型行
- self.type_layout = QHBoxLayout()
- self.type_label = QLabel("指令类型:")
- self.type_combobox = QComboBox()
- self.type_combobox.addItems(["打开文件", "打开网址", "翻页控制", "窗口切换"])
- # 设置下拉框的大小策略,使其水平方向和文本输入框一样长
- self.type_combobox.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
- self.type_layout.addWidget(self.type_label)
- self.type_layout.addWidget(self.type_combobox)
- layout.addLayout(self.type_layout)
- # 关键字行
- self.keyword_layout = QHBoxLayout()
- self.keyword_label = QLabel(" 关键字:")
- self.keyword_edit = QLineEdit()
- self.keyword_layout.addWidget(self.keyword_label)
- self.keyword_layout.addWidget(self.keyword_edit)
- layout.addLayout(self.keyword_layout)
- # 执行动作行
- self.action_layout = QHBoxLayout()
- self.action_label = QLabel("执行动作:")
- self.action_edit = QLineEdit()
- self.action_layout.addWidget(self.action_label)
- self.action_layout.addWidget(self.action_edit)
- layout.addLayout(self.action_layout)
- # 确定和取消按钮
- self.button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
- self.button_box.accepted.connect(self.accept)
- self.button_box.rejected.connect(self.reject)
- self.button_box.button(QDialogButtonBox.Ok).setText("确定")
- self.button_box.button(QDialogButtonBox.Cancel).setText("取消")
- layout.addWidget(self.button_box)
- self.setLayout(layout)
- # 如果有指令数据,则填充到输入框中
- if instruction_data:
- self.name_edit.setText(instruction_data["name"])
- self.keyword_edit.setText(instruction_data["keyword"])
- self.action_edit.setText(instruction_data["action"])
- # 选中对应的指令类型
- index = self.type_combobox.findText(instruction_data["type"])
- if index != -1:
- self.type_combobox.setCurrentIndex(index)
- def get_instruction_data(self):
- return {
- "name": self.name_edit.text(),
- "type": self.type_combobox.currentIndex(),
- "keyword": self.keyword_edit.text(),
- "action": self.action_edit.text()
- }
- class FileSettingPage(QWidget):
- def __init__(self, c_datas):
- super().__init__()
- # 总布局
- self.layout = QVBoxLayout()
- # 顶部按钮布局
- self.top_layout = QHBoxLayout()
- self.btnAdd = QPushButton("添加")
- self.btnModify = QPushButton("修改")
- self.btnDelete = QPushButton("删除")
- self.top_layout.addWidget(self.btnAdd)
- self.top_layout.addWidget(self.btnModify)
- self.top_layout.addWidget(self.btnDelete)
- self.top_layout.addStretch() # 使按钮靠左排列
- # 设置表格
- self.tableWidget = QTableWidget()
- self.tableWidget.setColumnCount(6) # 设置列数,多加一列放置选择框和ID
- self.tableWidget.setHorizontalHeaderLabels(["", "ID", "指令名称", "指令类型", "关键字", "执行动作"])
- # self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # 列宽度平均分配
- self.tableWidget.verticalHeader().setVisible(False) # 隐藏垂直表头
- # 获取表格总宽度
- total_width = self.tableWidget.width()
- self.tableWidget.setColumnWidth(0, int(total_width * 0.05))
- self.tableWidget.setColumnWidth(1, int(total_width * 0.08))
- self.tableWidget.setColumnWidth(2, int(total_width * 0.15))
- self.tableWidget.setColumnWidth(3, int(total_width * 0.15))
- self.tableWidget.setColumnWidth(4, int(total_width * 0.27))
- self.tableWidget.setColumnWidth(5, int(total_width * 0.30))
- # 添加按钮点击事件
- self.btnAdd.clicked.connect(self.add_instruction)
- self.btnModify.clicked.connect(self.modify_instruction)
- self.btnDelete.clicked.connect(self.delete_instruction)
- # 创建单选按钮组
- self.checkbox_group = QButtonGroup()
- self.show_table(c_datas)
- # 将布局添加到主布局
- self.layout.addLayout(self.top_layout)
- self.layout.addWidget(self.tableWidget)
- self.setLayout(self.layout)
- def show_table(self, c_datas):
- # 将数据显示到表格中
- for row_index, row_data in enumerate(c_datas):
- self.tableWidget.insertRow(row_index)
- checkbox = QCheckBox()
- self.checkbox_group.addButton(checkbox) # 将复选框添加到单选按钮组
- self.tableWidget.setCellWidget(row_index, 0, checkbox)
- self.tableWidget.setItem(row_index, 1, QTableWidgetItem(str(row_data[0])))
- self.tableWidget.setItem(row_index, 2, QTableWidgetItem(row_data[1]))
- if row_data[2] == 0:
- action_type = "打开文件"
- elif row_data[2] == 1:
- action_type = "打开网址"
- elif row_data[2] == 2:
- action_type = "翻页控制"
- else:
- action_type = "窗口切换"
- self.tableWidget.setItem(row_index, 3, QTableWidgetItem(action_type))
- self.tableWidget.setItem(row_index, 4, QTableWidgetItem(row_data[3]))
- self.tableWidget.setItem(row_index, 5, QTableWidgetItem(row_data[4]))
- def add_instruction(self):
- dialog = AddInstructionDialog(None)
- if dialog.exec_() == QDialog.Accepted:
- instruction_data = dialog.get_instruction_data()
- # 在这里你应该将instruction_data修改到数据库并刷新表格
- db = DatabaseManager()
- db.insert_command(instruction_data["name"], instruction_data["type"], instruction_data["keyword"],
- instruction_data["action"])
- c_datas = db.fetch_all_commands()
- db.__del__()
- # 先清空数据,再显示新数据
- self.tableWidget.setRowCount(0)
- self.show_table(c_datas)
- config.local_commands = c_datas
- def modify_instruction(self):
- """获取选中的行索引"""
- row_index = self.tableWidget.currentRow()
- if row_index == -1: # 没有选中任何复选框
- return None
- # 获取选中行的数据
- data = {
- "name": self.tableWidget.item(row_index, 2).text(),
- "type": self.tableWidget.item(row_index, 3).text(),
- "keyword": self.tableWidget.item(row_index, 4).text(),
- "action": self.tableWidget.item(row_index, 5).text()
- }
- dialog = AddInstructionDialog(data)
- if dialog.exec_() == QDialog.Accepted:
- instruction_data = dialog.get_instruction_data()
- # 在这里你应该将instruction_data修改到数据库并刷新表格
- db = DatabaseManager()
- db.update_command(instruction_data["name"], instruction_data["type"], instruction_data["keyword"],
- instruction_data["action"],
- self.tableWidget.item(row_index, 1).text())
- c_datas = db.fetch_all_commands()
- db.__del__()
- # 先清空数据,再显示新数据
- self.tableWidget.setRowCount(0)
- self.show_table(c_datas)
- config.local_commands = c_datas
- def delete_instruction(self):
- """获取选中的行索引"""
- row_index = self.tableWidget.currentRow()
- if row_index == -1: # 没有选中任何复选框
- return None
- db = DatabaseManager()
- db.delete_command(self.tableWidget.item(row_index, 1).text())
- c_datas = db.fetch_all_commands()
- db.__del__()
- # 先清空数据,再显示新数据
- self.tableWidget.setRowCount(0)
- self.show_table(c_datas)
- config.local_commands = c_datas
|