如何为TableWidget创建视觉辅助



我有一个包含1000行数据的表小部件。还有一个很好的功能是为表自动实现的,每当我们按下字母键时,它都会搜索匹配的数据。我想通过视觉辅助使它更直观一点。

我想创建一个标签,显示用户在过去2秒内输入的字母。它应该继续连接和显示新的字母。如果用户停止输入新字母超过2秒,则标签应消失。

我想我需要创造一种;经理;函数,该函数将接收按键并创建此标签,并在2秒后终止它。问题是我不知道如何使这个函数"等待";用于新的击键。

我想这个视觉辅助并不是什么新鲜事,可能有人以前实现过它,但我不知道它对谷歌的称呼,所以我很抱歉为它创建了一个帖子。

您可以在子类中重新实现表小部件的keyboardSearch()函数,然后创建一个子部件,该子部件将根据搜索进行更新。

请注意,搜索是基于QApplication.keyboardInputInterval自动重置的,这使得搜索小部件在很短的时间内出现(直到视图可以接受作为当前搜索的一部分的新搜索(。

from PyQt5 import QtCore, QtWidgets
from random import choice
from string import ascii_lowercase
class TableSearch(QtWidgets.QTableWidget):
def __init__(self):
super().__init__(0, 3)
self.setEditTriggers(self.NoEditTriggers)
for row in range(500):
self.insertRow(row)
for col in range(3):
text = ''.join(choice(ascii_lowercase) for i in range(5))
self.setItem(row, col, QtWidgets.QTableWidgetItem(text))
self.searchWidget = QtWidgets.QLabel(self)
self.searchWidget.setStyleSheet('''
QLabel {
border: 1px inset darkGray; 
border-radius: 2px;
background: palette(window);
}
''')
self.searchWidget.hide()
self.searchTimer = QtCore.QTimer(
singleShot=True, 
timeout=self.resetSearch, 
interval=QtWidgets.QApplication.instance().keyboardInputInterval())
def resetSearch(self):
self.searchWidget.setText('')
self.searchWidget.hide()
def updateSearchWidget(self):
if not self.searchWidget.text():
self.searchWidget.hide()
return
self.searchWidget.show()
self.searchWidget.adjustSize()
geo = self.searchWidget.geometry()
geo.moveBottomRight(
self.viewport().geometry().bottomRight() - QtCore.QPoint(2, 2))
self.searchWidget.setGeometry(geo)
def keyboardSearch(self, search):
super().keyboardSearch(search)
if not search:
self.searchWidget.setText('')
else:
text = self.searchWidget.text()
if not text:
text = 'Searching: '
text += search
self.searchWidget.setText(text)
self.updateSearchWidget()
self.searchTimer.start()
def resizeEvent(self, event):
super().resizeEvent(event)
self.updateSearchWidget()

最新更新