#!/usr/bin/env python
# coding: utf-8
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QWidget,
QListView,
QComboBox,
QTextEdit)
from PySide6.QtGui import QStandardItem, QStandardItemModel
from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import (
QFile,
QIODevice,
QAbstractListModel,
QModelIndex,
QTimer)
import sys
from collections import deque
import pandas as pd
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
self.ui=QFile(r'ui2.ui')
self.ui.open(QIODevice.ReadOnly)
loader=QUiLoader()
self.window=loader.load(self.ui)
self.et=self.window.findChild(QTextEdit, 'txt')
self.et.textChanged.connect(self.delay)
self.lv=self.window.findChild(QListView, 'listView')
# read word
self.df = pd.read_excel('word2.xlsx', engine='openpyxl')
self.model = QStandardItemModel()
self.lv.setModel(self.model)
self.lv.doubleClicked[QModelIndex].connect(self.item_clicked)
self.timer = QTimer()
self.timer.setSingleShot (True)
self.timer.timeout.connect(self.txt_changed)
self.timer_write = QTimer()
self.timer_write.timeout.connect(self.write_out)
self.timer_write.start(1000)
# result data
self.words = []
self.queue = deque()
self.grade0 = "G2"
self.grade = self.window.findChild(QComboBox, 'grade')
self.grade.addItem('G1')
self.grade.addItem('G2')
self.grade.addItem('G3')
def show(self):
self.window.show()
# 延时0.2秒查询
def delay(self):
self.timer.stop()
self.timer.start(200)
def txt_changed(self):
txt = self.et.toPlainText()
self.model.clear()
if txt != '':
records = self.df[self.df['text'].str.contains(txt)]
for i,v in records.iterrows():
self.model.appendRow(QStandardItem(v['text']))
# 双击条目,记录
def item_clicked(self, index):
item = self.model.itemFromIndex(index)
print(item.text())
self.words.append(item.text())
self.queue.append(1)
# 写出
def write_out(self):
if len(self.queue) >= 1:
words = list(set(self.words))
df = pd.DataFrame({'text': words})
# print(df)
df.to_excel('word_%s.xlsx' % self.grade.currentText(), sheet_name=self.grade.currentText())
self.queue.pop()
if __name__ == '__main__':
app=QApplication()
m=MainWindow()
m.show()
app.exec()
【无标题】pyqt qlistview 实现自动完成
最新推荐文章于 2025-03-03 13:39:27 发布