如何为 TableWidget 创建视觉辅助工具
Posted
技术标签:
【中文标题】如何为 TableWidget 创建视觉辅助工具【英文标题】:How create a visual aid for TableWidget 【发布时间】:2020-11-26 13:03:14 【问题描述】:我有一个包含 1000 多行数据的表格小部件。并且有一个为表格自动实现的不错的功能,只要我们按下字母键,它就会搜索匹配的数据。我想通过视觉辅助使它更直观一点。
我想创建一个标签来显示用户在过去 2 秒内输入的字母。它应该继续连接并显示新字母。如果用户停止输入新字母超过 2 秒,那么标签应该会消失。
我认为我需要创建一种“管理器”功能,它会接收按键并创建此标签并在 2 秒后终止它。问题是我不知道如何让这个函数“等待”新的击键。
我想这个视觉辅助工具不是什么新东西,可能以前有人实施过,但我不知道它对 Google 的称呼,所以很抱歉为它创建了一个帖子。
【问题讨论】:
【参考方案1】:您可以在子类中重新实现 tablewidget 的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()
【讨论】:
以上是关于如何为 TableWidget 创建视觉辅助工具的主要内容,如果未能解决你的问题,请参考以下文章