PyQt5中的组合框(QComboBox)是一种常用的用户交互控件,可以显示下拉菜单中的选项,并允许用户从中选择一个或多个选项。本次攻略将详细讲解如何在PyQt5中使用组合框,并将用户输入的项目存储在指定位置中。
以下是实现该功能的步骤:
第一步:导入必要的模块
在Python代码中,我们需要导入PyQt5模块中关于组合框的相关类(QComboBox和QStandardItemModel)以及其他用到的类,具体如下:
from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox, QAction, QFileDialog
from PyQt5.QtGui import QStandardItemModel
第二步:创建主窗口
我们使用QMainWindow类创建一个具有文件菜单的主窗口,其中包含“打开”和“退出”两个操作,还需要创建一个组合框来接收用户输入的项目,如下所示:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建菜单项
open_file = QAction("打开", self)
open_file.setShortcut("Ctrl+O")
open_file.triggered.connect(self.openFile)
exit_app = QAction("退出", self)
exit_app.setShortcut("Ctrl+Q")
exit_app.triggered.connect(self.close)
# 创建菜单栏
menu = self.menuBar()
file_menu = menu.addMenu("文件")
file_menu.addAction(open_file)
file_menu.addAction(exit_app)
# 创建组合框
self.combo = QComboBox()
self.setCentralWidget(self.combo)
第三步:打开文件并将内容添加至组合框
在“打开文件”操作被触发时,我们将弹出文件对话框并读取选定的文件内容,将每一行内容添加至组合框中,如下所示:
def openFile(self):
# 打开文件对话框并读取选定的文件内容
file_path, _ = QFileDialog.getOpenFileName(self, "打开文件", "", "文本文件 (*.txt);;所有文件 (*)")
if not file_path:
return
with open(file_path, "r") as f:
items = f.readlines()
# 将文件内容添加至组合框中
model = QStandardItemModel()
for item in items:
model.appendRow(QStandardItem(item.strip()))
self.combo.setModel(model)
第四步:存储用户输入的项目
当用户选择了组合框中的某一项并提交时,我们将获取该项的文本内容,并将其存储到指定位置中,如下所示:
def saveItem(self):
if not self.combo.currentIndex() == -1:
item_text = self.combo.currentText()
with open("user_items.txt", "a") as f:
f.write(item_text + "\n")
示例一:
假设我们已经在主窗口中添加了一个“保存”操作按钮,用户可以选择组合框中的任何一项,然后单击该按钮将其存储到“user_items.txt”文件中。以下代码已经将“保存”操作按钮添加到了主窗口,在用户单击该按钮时,将执行“saveItem”方法,将用户当前选择的项保存到文件中:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建菜单项
open_file = QAction("打开", self)
open_file.setShortcut("Ctrl+O")
open_file.triggered.connect(self.openFile)
exit_app = QAction("退出", self)
exit_app.setShortcut("Ctrl+Q")
exit_app.triggered.connect(self.close)
# 创建菜单栏
menu = self.menuBar()
file_menu = menu.addMenu("文件")
file_menu.addAction(open_file)
file_menu.addAction(exit_app)
# 创建组合框
self.combo = QComboBox()
self.setCentralWidget(self.combo)
# 创建保存按钮
save_item = QAction("保存", self)
save_item.setShortcut("Ctrl+S")
save_item.triggered.connect(self.saveItem)
menu.addAction(save_item)
def saveItem(self):
if not self.combo.currentIndex() == -1:
item_text = self.combo.currentText()
with open("user_items.txt", "a") as f:
f.write(item_text + "\n")
示例二:
在这个示例中,我们使用了QWidget类来创建一个窗口,并将组合框和“保存”按钮添加到其中。当用户单击按钮时,程序将获取组合框中的所有项,并将它们以逗号分隔的形式保存至“user_items.csv”文件中:
from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QPushButton, QVBoxLayout
import csv
class MyWindow(QWidget):
def __init__(self):
super().__init__()
# 创建组合框
self.combo = QComboBox()
self.addItems()
# 创建保存按钮
self.save_button = QPushButton("保存")
self.save_button.clicked.connect(self.saveItems)
# 创建垂直布局并添加组合框和按钮
layout = QVBoxLayout()
layout.addWidget(self.combo)
layout.addWidget(self.save_button)
self.setLayout(layout)
def addItems(self):
# 添加组合框的项
self.combo.addItems(["苹果", "香蕉", "橙子"])
def saveItems(self):
# 将所有项保存到CSV文件中
items = [self.combo.itemText(i) for i in range(self.combo.count())]
with open("user_items.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(items)
这就是完整的使用攻略,希望对您有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5组合框 用户输入的项目存储在选定位置 - Python技术站